From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:25 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 11:13:26 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 13 11:13:26 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:26 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:26 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 13 11:13:26 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 11:13:26 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 11:13:26 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 11:13:26 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:57 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 13 15:13:57 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:57 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:57 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:57 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0001.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0001.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 15:13:58 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:13:58 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0002.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0002.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 15:21:20 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 15:21:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0003.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0003.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 16:00:53 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 16:00:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:50 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 13 20:01:50 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:50 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:50 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:50 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:50 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:50 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 13 20:01:50 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0004.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:51 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 20:01:51 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0004.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 13 20:01:51 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:51 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:51 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 13 20:01:51 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 20:01:51 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 13 20:01:51 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 13 20:01:51 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:26 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 14 08:02:26 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:26 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:26 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:26 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0005.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0005.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 08:02:27 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 08:02:27 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0006.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0006.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 12:00:52 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 12:00:52 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0007.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0007.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 16:00:49 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 16:00:49 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0008.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0008.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 14 20:00:48 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 14 20:00:48 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0009.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0009.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 08:02:15 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 08:02:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0010.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0010.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 12:00:57 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 12:00:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0011.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0011.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 16:00:49 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 16:00:49 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:48 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 15 20:00:48 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:48 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:48 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:48 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0012.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0012.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 15 20:00:49 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 15 20:00:49 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:38 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 16 08:02:38 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0013.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0013.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 08:02:39 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 08:02:39 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0014.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0014.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 12:00:53 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 12:00:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0015.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0015.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 16:00:53 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 16:00:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:49 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0016.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0016.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 16 20:00:50 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 20:00:51 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 16 20:00:51 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 16 20:00:51 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:41 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 17 08:02:41 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:41 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:41 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:41 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:41 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:41 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 17 08:02:41 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0017.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:42 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 08:02:42 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0017.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 17 08:02:42 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:42 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:42 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 17 08:02:42 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 08:02:42 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 08:02:42 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 08:02:42 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0018.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0018.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 17 12:01:09 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 12:01:10 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 12:01:10 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 12:01:10 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0019.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0019.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 16:00:55 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 16:00:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0020.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0020.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 17 20:00:56 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 17 20:00:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:26 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Jan 18 08:04:26 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:26 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:26 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0021.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0021.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 08:04:27 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 08:04:27 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0022.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0022.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 12:01:11 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 12:01:11 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0023.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:38 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 16:01:39 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0023.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Jan 18 16:01:39 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:39 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:39 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Jan 18 16:01:39 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 16:01:39 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 16:01:39 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 16:01:39 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:00 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0024.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0024.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 18 20:01:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 18 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0025.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0025.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 08:04:48 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 08:04:48 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:05 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Jan 19 12:01:05 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:05 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:05 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:05 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:05 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0026.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0026.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 12:01:09 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 12:01:09 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:21 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Jan 19 16:03:21 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:21 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:22 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:22 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:22 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:22 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Jan 19 16:03:22 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0027.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:22 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 16:03:22 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0027.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Jan 19 16:03:23 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:23 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:23 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Jan 19 16:03:23 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 16:03:23 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 16:03:23 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 16:03:23 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:53 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Jan 19 20:00:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0028.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0028.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 19 20:00:54 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 19 20:00:54 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:39 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 20 08:07:40 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:40 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:40 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:40 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:40 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:40 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 20 08:07:40 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0029.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:40 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 08:07:41 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0029.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 20 08:07:41 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:41 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:41 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 20 08:07:41 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 08:07:41 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 08:07:41 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 08:07:41 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:17 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0030.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0030.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 12:02:18 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 12:02:19 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 12:02:19 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0031.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0031.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 16:00:58 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 16:00:58 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:53 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0032.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0032.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 20 20:00:55 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 20 20:00:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:04 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 21 08:04:04 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:04 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:04 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:04 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:04 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0033.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0033.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 08:04:05 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 08:04:05 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0034.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 12:01:09 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0034.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 21 12:01:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:09 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 21 12:01:09 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 12:01:09 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 12:01:09 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 12:01:09 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0035.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 16:00:57 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0035.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 21 16:00:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:57 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 21 16:00:57 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 16:00:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 16:00:57 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 16:00:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0036.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0036.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 21 20:00:55 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 21 20:00:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0037.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0037.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 08:02:56 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 08:02:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:56 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 22 12:00:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:56 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:56 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:56 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:56 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 22 12:00:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0038.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:57 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 12:00:57 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0038.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 22 12:00:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:57 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 22 12:00:57 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 12:00:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 12:00:57 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 12:00:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0039.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0039.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 16:01:30 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 16:01:30 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:24 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0040.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0040.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 22 20:01:25 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 22 20:01:25 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:52 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 23 08:02:52 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0041.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0041.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 08:02:53 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 08:02:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:02 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 23 12:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:02 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0042.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0042.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 12:01:03 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 12:01:03 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:01 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 23 16:02:01 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:01 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:01 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:01 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:01 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:01 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0043.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0043.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 16:02:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 16:02:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0044.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0044.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 23 20:00:57 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 23 20:00:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:22 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 24 08:03:22 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:22 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:22 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:22 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0045.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0045.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 08:03:23 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 08:03:23 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:21 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 24 12:03:22 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:22 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:22 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:22 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:22 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:22 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 24 12:03:22 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0046.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:22 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 12:03:23 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0046.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 24 12:03:23 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:23 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:23 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 24 12:03:23 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 12:03:23 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 12:03:23 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 12:03:23 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:34 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 24 16:01:34 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:34 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0047.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0047.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 16:01:35 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 16:01:35 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0048.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0048.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 24 20:02:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 24 20:02:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0049.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:12 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 08:02:13 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0049.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Jan 25 08:02:13 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:13 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:13 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Jan 25 08:02:13 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 08:02:13 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 08:02:13 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 08:02:13 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:11 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0050.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0050.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 12:01:12 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 12:01:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0051.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0051.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 16:01:10 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 16:01:10 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:01 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Jan 25 20:01:01 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:01 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:01 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:01 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:01 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:01 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Jan 25 20:01:01 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0052.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 20:01:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0052.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Jan 25 20:01:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Jan 25 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Jan 25 20:01:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Jan 25 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:12 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0053.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0053.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 08:06:13 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 08:06:13 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:13 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Jan 26 12:01:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0054.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0054.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 12:01:14 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 12:01:14 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:00:59 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Jan 26 16:00:59 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:00:59 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:00:59 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:00:59 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0055.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0055.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 16:01:00 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 16:01:00 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:51 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0056.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0056.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Jan 26 20:00:52 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Jan 26 20:00:52 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:10 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 27 08:07:12 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:12 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:12 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:12 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:12 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:12 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0057.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0057.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 08:07:13 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 08:07:13 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0058.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0058.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 12:02:21 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 12:02:21 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0059.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 16:01:14 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0059.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 27 16:01:14 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:14 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:14 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 27 16:01:14 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 16:01:14 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 16:01:14 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 16:01:14 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0060.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0060.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Jan 27 20:01:06 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Jan 27 20:01:06 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:00 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 28 08:06:00 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:00 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:00 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:00 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:00 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:00 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0061.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0061.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 08:06:01 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 08:06:01 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0062.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0062.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 12:02:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 12:02:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0063.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0063.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 16:01:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 16:01:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0064.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0064.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Jan 28 20:01:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Jan 28 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0065.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0065.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 08:07:44 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 08:07:44 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0066.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0066.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 12:01:08 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 12:01:08 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:00:59 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0067.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0067.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 16:01:00 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 16:01:00 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0068.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 20:01:03 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0068.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Jan 29 20:01:03 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:03 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:03 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Jan 29 20:01:03 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 20:01:03 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Jan 29 20:01:03 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Jan 29 20:01:03 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:35 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 30 08:09:36 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:36 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:36 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:36 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:36 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:36 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0069.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0069.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 08:09:37 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 08:09:37 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0070.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 12:04:09 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0070.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 30 12:04:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:09 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 30 12:04:09 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 12:04:09 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 12:04:09 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 12:04:09 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:25 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0071.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0071.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 16:04:26 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 16:04:26 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0072.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:24 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 20:02:25 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0072.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Jan 30 20:02:25 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:25 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:25 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Jan 30 20:02:25 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 20:02:25 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Jan 30 20:02:25 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Jan 30 20:02:25 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:10 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 31 08:08:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:10 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:10 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:11 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:11 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 31 08:08:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0073.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 08:08:11 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0073.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 31 08:08:11 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:11 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:12 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 31 08:08:12 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 08:08:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 08:08:12 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 08:08:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0074.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:30 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 12:04:31 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0074.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 31 12:04:31 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:31 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:31 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 31 12:04:31 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 12:04:31 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 12:04:31 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 12:04:31 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0075.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0075.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 16:02:31 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 16:02:31 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:15 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Jan 31 20:01:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:15 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:15 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0076.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0076.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Jan 31 20:01:16 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Jan 31 20:01:16 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:17 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 1 08:10:17 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:17 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:17 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:17 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:19 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:19 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 1 08:10:19 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0077.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:19 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 08:10:20 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0077.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 1 08:10:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:20 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 1 08:10:20 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 08:10:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 08:10:20 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 08:10:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0078.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0078.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 12:02:53 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 12:02:53 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:14 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0079.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0079.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 16:01:15 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 16:01:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0080.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 20:01:10 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0080.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 1 20:01:11 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:11 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:11 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 1 20:01:11 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 20:01:11 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 1 20:01:12 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 1 20:01:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:44 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 2 08:13:44 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:44 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:44 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:44 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:44 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:44 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0081.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0081.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 08:13:45 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 08:13:45 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0082.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0082.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 12:03:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 12:03:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0083.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0083.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 16:01:20 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 16:01:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0084.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0084.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 2 20:01:09 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 2 20:01:09 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:53 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Feb 3 08:12:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0085.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0085.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:57 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Feb 3 08:12:57 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 08:12:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 08:12:57 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 08:12:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0086.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0086.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 12:02:56 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 12:02:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0087.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 16:01:12 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0087.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Feb 3 16:01:12 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:12 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:12 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Feb 3 16:01:12 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 16:01:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 16:01:12 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 16:01:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0088.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0088.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 20:01:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 3 20:01:15 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 3 20:01:16 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:31 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Feb 4 08:08:32 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:32 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:32 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:32 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:33 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:33 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Feb 4 08:08:34 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0089.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:34 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 08:08:34 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0089.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Feb 4 08:08:34 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:34 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:35 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Feb 4 08:08:35 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 08:08:35 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 08:08:35 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 08:08:35 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0090.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0090.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Feb 4 12:02:54 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:55 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Feb 4 12:02:55 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 12:02:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 12:02:55 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 12:02:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:20 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Feb 4 16:01:20 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:20 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0091.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0091.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 16:01:21 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 16:01:21 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0092.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0092.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 4 20:01:13 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 4 20:01:13 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0093.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0093.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 08:08:08 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 08:08:08 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0094.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0094.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 12:02:56 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 12:02:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0095.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0095.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 16:01:17 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 16:01:17 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 16:01:18 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0096.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:06 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 20:01:07 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0096.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Feb 5 20:01:07 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:07 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:07 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Feb 5 20:01:07 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 20:01:07 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 5 20:01:07 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 5 20:01:07 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:05 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Feb 6 08:16:05 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:05 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:05 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:05 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:06 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:06 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Feb 6 08:16:06 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0097.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:07 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 08:16:07 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0097.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Feb 6 08:16:07 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:07 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:07 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Feb 6 08:16:07 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 08:16:07 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 08:16:07 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 08:16:07 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:55 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0098.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0098.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 12:02:57 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 12:02:57 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0099.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0099.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 16:01:15 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 16:01:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0100.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0100.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 6 20:01:07 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 6 20:01:07 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:37 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Feb 7 08:25:37 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:37 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:38 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:38 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:38 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:38 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Feb 7 08:25:39 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0101.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:39 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 08:25:40 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0101.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Feb 7 08:25:40 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:40 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:40 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Feb 7 08:25:40 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 08:25:40 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 08:25:40 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 08:25:40 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0102.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:34 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 12:03:35 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0102.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Feb 7 12:03:35 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:35 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:35 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Feb 7 12:03:35 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 12:03:35 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 12:03:35 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 12:03:35 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0103.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0103.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 16:01:16 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 16:01:16 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:13 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Feb 7 20:01:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:13 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:13 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:15 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:15 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Feb 7 20:01:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0104.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 20:01:16 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0104.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Feb 7 20:01:16 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:16 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:16 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Feb 7 20:01:16 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 20:01:16 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 7 20:01:16 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 7 20:01:16 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:08 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 8 08:24:09 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:09 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:09 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:09 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:09 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:09 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 8 08:24:10 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0105.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 08:24:11 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0105.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 8 08:24:11 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:11 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:11 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 8 08:24:11 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 08:24:11 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 08:24:11 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 08:24:11 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0106.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0106.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 12:03:36 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 12:03:36 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0107.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0107.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 16:01:27 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 16:01:27 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:11 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 8 20:01:11 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:11 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:11 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0108.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0108.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 8 20:01:12 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 8 20:01:12 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:03 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 9 08:10:03 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:03 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:03 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:03 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:03 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:03 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0109.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0109.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 08:10:04 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 08:10:04 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0110.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:28 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 12:03:29 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0110.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 9 12:03:29 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:29 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:29 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 9 12:03:29 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 12:03:29 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 12:03:29 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 12:03:29 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0111.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0111.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 16:01:25 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 16:01:25 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0112.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:19 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 20:01:20 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0112.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 9 20:01:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:21 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 9 20:01:21 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 20:01:23 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 9 20:01:23 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 9 20:01:23 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:45 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Feb 10 08:21:48 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:48 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:51 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:51 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:51 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:51 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Feb 10 08:21:54 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0113.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:54 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 08:21:54 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0113.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Feb 10 08:21:54 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:54 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:54 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Feb 10 08:21:55 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 08:21:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 08:21:55 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 08:21:56 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0114.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0114.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 12:03:50 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 12:03:50 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:17 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Feb 10 16:01:17 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:17 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:17 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:17 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:17 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:17 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0115.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0115.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 16:01:18 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 16:01:18 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:19 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Feb 10 20:01:19 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:19 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:19 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0116.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0116.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Feb 10 20:01:20 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Feb 10 20:01:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:22 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Feb 11 08:13:23 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:23 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:23 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:23 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:23 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:23 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Feb 11 08:13:23 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0117.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:23 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 08:13:24 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0117.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Feb 11 08:13:24 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:24 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:24 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Feb 11 08:13:24 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 08:13:24 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 08:13:24 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 08:13:24 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0118.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0118.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 12:02:55 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 12:02:55 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0119.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0119.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 16:01:14 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 16:01:14 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:04 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sat Feb 11 20:01:04 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:04 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:04 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:04 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:04 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:04 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sat Feb 11 20:01:07 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0120.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:08 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 20:01:08 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0120.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sat Feb 11 20:01:08 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:08 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:08 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sat Feb 11 20:01:08 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 20:01:08 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sat Feb 11 20:01:08 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sat Feb 11 20:01:08 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:09:58 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Feb 12 08:09:59 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:09:59 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:10:00 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:10:00 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:10:00 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:10:00 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Feb 12 08:10:00 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0121.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:10:00 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 08:10:01 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0121.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Feb 12 08:10:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:10:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:10:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Feb 12 08:10:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 08:10:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 08:10:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 08:10:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0122.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0122.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 12:03:00 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 12:03:00 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:18 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Feb 12 16:01:18 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:18 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:18 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:18 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:18 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0123.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0123.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 16:01:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 16:01:21 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 16:01:21 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0124.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0124.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Sun Feb 12 20:01:10 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Sun Feb 12 20:01:10 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:17:58 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Feb 13 08:17:58 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:17:58 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:17:58 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:17:59 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:17:59 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:17:59 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Feb 13 08:18:01 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0125.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:18:01 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 08:18:02 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0125.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Feb 13 08:18:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:18:02 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:18:02 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Feb 13 08:18:02 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 08:18:02 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 08:18:02 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 08:18:03 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0126.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:19 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 12:03:20 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0126.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Feb 13 12:03:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:20 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:20 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Feb 13 12:03:20 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 12:03:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 12:03:20 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 12:03:20 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0127.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0127.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 16:01:34 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 16:01:34 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0128.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0128.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Mon Feb 13 20:01:17 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Mon Feb 13 20:01:17 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:10 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Feb 14 08:20:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:10 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:11 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:11 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:11 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Feb 14 08:20:12 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0129.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:13 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 08:20:17 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0129.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Feb 14 08:20:18 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:18 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:18 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Feb 14 08:20:18 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 08:20:19 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 08:20:19 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 08:20:19 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0130.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0130.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 12:03:35 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 12:03:35 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 12:03:37 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0131.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0131.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Feb 14 16:01:46 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 16:01:48 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 16:01:48 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 16:01:48 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:20 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Tue Feb 14 20:01:20 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:20 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:20 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:20 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:20 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0132.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0132.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Tue Feb 14 20:01:21 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Tue Feb 14 20:01:21 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:06 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 15 08:30:08 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:10 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:10 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:10 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:10 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:10 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 15 08:30:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0133.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:11 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 08:30:18 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0133.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 15 08:30:18 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:18 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:18 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 15 08:30:18 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 08:30:18 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 08:30:18 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 08:30:19 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:43 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 15 12:05:43 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:43 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0134.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0134.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 12:05:44 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 12:05:44 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:42 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 15 16:01:42 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:42 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:42 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:42 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0135.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0135.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 16:01:43 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 16:01:43 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0136.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0136.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 19:28:15 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 19:28:15 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:23 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Wed Feb 15 20:14:25 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:25 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:25 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:25 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:25 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:26 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Wed Feb 15 20:14:26 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0137.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:26 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 20:14:28 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0137.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Wed Feb 15 20:14:28 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:28 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:28 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Wed Feb 15 20:14:28 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 20:14:28 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Wed Feb 15 20:14:29 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Wed Feb 15 20:14:29 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:00 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Thu Feb 16 08:48:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:02 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:02 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:03 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:03 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:03 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Thu Feb 16 08:48:04 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0138.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:04 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 16 08:48:06 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0138.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Thu Feb 16 08:48:06 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:06 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:06 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Thu Feb 16 08:48:06 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 16 08:48:06 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Thu Feb 16 08:48:06 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Thu Feb 16 08:48:06 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Thu Dec 2 15:17:49 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:51 2006 Subject: [egenix-users] eGenix USD Product Prices Message-ID: <41AF240D.7070700@egenix.com> Dear Customers and Users, due to the continued weak US dollar/Euro exchange rate, eGenix will have to adapt the US dollar product prices starting January, 1st 2005. The Euro prices of our products will remain unchanged. If you intend to purchase licenses for our products, you can save up to 20% by ordering them in USD before January 1st. Best regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 02 2004) >>> 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,FreeBSD for free ! :::: From ielbert at genuone.com Thu Dec 2 17:48:30 2004 From: ielbert at genuone.com (Igor Elbert) Date: Fri Mar 31 16:33:51 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: <417DFD6D.1060306@egenix.com> Message-ID: ReadConflict errors in mxODBC keep popping up. As suggested we made sure that connection pooling is disabled in the ODBC manager and enabled in the mxODBC Zope DA. The pool size is set to 12 which should be enough since we are testing with no more than 2 simultaneous users. What is puzzling is that, judging by the traceback in my previous message, the read conflicts happen when calling Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile data in ZODB is beyond my understanding. It seems that the problem occurs only when "On demand" connection is enabled. In this case mxODBC DA unnecessary causes ZODB to grow. To test this we created a Zope Folder containing mxODBC connection and a simple select ZSQL script that uses it. I run ZSQL many (20+) times and look at the Folder's Undo tab. It shows transactions that can be undone - data.fs grows. Please advise. Thanks, Igor -----Original Message----- From: M.-A. Lemburg [mailto:mal@egenix.com] Sent: Tuesday, October 26, 2004 3:32 AM To: Igor Elbert Cc: egenix-users@egenix.com Subject: Re: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA Igor Elbert wrote: > When testing mxODBCZopeDA we frequently encounter ReadConflict errors > related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: > > Traceback (most recent call last): > File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ > DB__=dbc() > File "..../lib/python\ZODB\Connection.py", line 553, in setstate > invalid = self._is_invalidated(obj) > File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated > raise ReadConflictError(object=obj) > ReadConflictError: database read conflict error (oid 0000000000001bac, class > Products.mxODBCZopeDA.ZopeDA.ZopeConnection > ) > > This causes Zope's DA to raise 'Not connected to a database' exception. Please make sure that you have connection pooling disabled in the ODBC manager and enabled in the mxODBC Zope DA. It may be necessary to set the pool size of the Zope DA to a higher value. > When user hits "reload" the problem disappears. It can not be a timeout > issues since the problem hits actively working users. > > Our environment is: > Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python > 2.1.3, win32) > Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] > System Platform win32 > Connection Information Connected database: Microsoft SQL Server, 08.00.0194 > ODBC driver: SQLSRV32.DLL, 03.80.0194 > > Please help! > > Thank you, > Igor Elbert > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Oct 26 2004) >>> 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,FreeBSD for free ! :::: This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. From mal at egenix.com Fri Dec 3 10:30:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:51 2006 Subject: [egenix-users] Critical: ReadConflict Error with mxODBCZopeDA In-Reply-To: References: Message-ID: <41B03234.3050808@egenix.com> Igor Elbert wrote: > ReadConflict errors in mxODBC keep popping up. > As suggested we made sure that connection pooling is disabled in the ODBC > manager and enabled in the mxODBC Zope DA. > > The pool size is set to 12 which should be enough since we are testing with > no more than 2 simultaneous users. > > What is puzzling is that, judging by the traceback in my previous message, > the read conflicts happen when calling > Products.mxODBCZopeDA.ZopeDA.ZopeConnection. Why mxODBC DA stores volatile > data in ZODB is beyond my understanding. > It seems that the problem occurs only when "On demand" connection is > enabled. In this case mxODBC DA unnecessary causes ZODB to grow. > > To test this we created a Zope Folder containing mxODBC connection and a > simple select ZSQL script that uses it. I run ZSQL many (20+) times and look > at the Folder's Undo tab. It shows transactions that can be undone - data.fs > grows. If you use the on demand feature, the Zope DA will connect to the database as necessary. The current connect state is stored as non-volatile attribute and updated when the object switches from "on demand" to "connected" state. This is what you see as transaction on the object. The situation gets complicated when multiple copies of the connection object (one for each thread that the server is running) switch into the connected state more or less at the same time. We have already added code to the DA that resolves these apparent conflicts, so we'd like to track this down. Until the problem is located, please switch off the on demand feature and set the connection to connected. > Please advise. > > Thanks, > Igor > > > -----Original Message----- > From: M.-A. Lemburg [mailto:mal@egenix.com] > Sent: Tuesday, October 26, 2004 3:32 AM > To: Igor Elbert > Cc: egenix-users@egenix.com > Subject: Re: [egenix-users] Critical: ReadConflict Error with > mxODBCZopeDA > > > Igor Elbert wrote: > >>When testing mxODBCZopeDA we frequently encounter ReadConflict errors >>related to mxODBCZopeDA.ZopeDA.ZopeConnection object. Traceback is: >> >>Traceback (most recent call last): >> File "..../lib/python\Shared\DC\ZRDB\DA.py", line 398, in __call__ >> DB__=dbc() >> File "..../lib/python\ZODB\Connection.py", line 553, in setstate >> invalid = self._is_invalidated(obj) >> File "..../lib/python\ZODB\Connection.py", line 579, in _is_invalidated >> raise ReadConflictError(object=obj) >>ReadConflictError: database read conflict error (oid 0000000000001bac, > > class > >>Products.mxODBCZopeDA.ZopeDA.ZopeConnection >>) >> >>This causes Zope's DA to raise 'Not connected to a database' exception. > > > Please make sure that you have connection pooling disabled in the > ODBC manager and enabled in the mxODBC Zope DA. It may be necessary > to set the pool size of the Zope DA to a higher value. > > >>When user hits "reload" the problem disappears. It can not be a timeout >>issues since the problem hits actively working users. >> >>Our environment is: >>Zope Version (Zope 2.6.2 (binary release, python 2.1, win32-x86), python >>2.1.3, win32) >>Python Version 2.1.3 (#35, Apr 8 2002, 17:47:50) [MSC 32 bit (Intel)] >>System Platform win32 >>Connection Information Connected database: Microsoft SQL Server, > > 08.00.0194 > >>ODBC driver: SQLSRV32.DLL, 03.80.0194 >> >>Please help! >> >>Thank you, >>Igor Elbert >> >>This email and any files transmitted with it are confidential and intended > > solely for the use of the individual or entity to whom they are addressed. > If you have received this email in error please notify the system manager. > This message contains confidential information and is intended only for the > individual named. If you are not the named addressee you should not > disseminate, distribute or copy this e-mail. > >> >>_______________________________________________________________________ >>eGenix.com User Mailing List http://www.egenix.com/ >>http://lists.egenix.com/mailman/listinfo/egenix-users > > > -- > Marc-Andre Lemburg > eGenix.com > > Professional Python Services directly from the Source (#1, Oct 26 2004) > >>> 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,FreeBSD for free ! :::: > > This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Fri Dec 3 19:58:53 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:51 2006 Subject: [egenix-users] Python 2.4 versions of our Python packages Message-ID: <41B0B76D.4090204@egenix.com> Just wanted to let you know that we'll be releasing Python 2.4 versions of egenix-mx-base, -mx-commercial and -mx-experimental early next week. Due to popular demand we will also create UCS4 (wide Unicode) versions of the Python 2.3 and 2.4 RPMs. This should make installation of the RPMs on recent Linux distributions easier since most of these have jumped on the RedHat bandwagon and ship UCS4 Python versions on their CDs/DVDs. Regards, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 03 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:35:46 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:51 2006 Subject: [egenix-users] ANN: eGenix mx Experimental Package 0.9.0 (mxNumber, mxTidy, mxURL, etc.) Message-ID: <41B4A682.3070201@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Experimental Extension Package Version 0.9.0 Experimental Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Experimental Extensions for Python are a collection of beta quality software tools for Python which will be integrated into the other mx Extension Packages after they have matured to professional quality tools. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX EXPERIMENTAL PACKAGE OVERVIEW mxNumber - Python Interface to GNU MP Number Types mxNumber provides direct access to the high performance numeric types available in the GNU Multi-Precision Lib (GMP). This library is licensed under the LGPL and runs on practically all Unix platforms. eGenix.com has ported the GMP lib to Windows, to also provide our Windows users with the added benefit of being able to do arbitrary precision calculations and to easily port applications based on mxNumber from Unix to Windows or vice-versa. The package currently provide theses numerical types: 1. Integer(value) -- arbitrary precision integers much like Python longs only faster 2. Rational(nom,denom) -- rational numbers with Integers as numerator and denominator 3. Float(value[,prec]) -- floating point number with at least prec bits precision 4. FareyRational(value, maxden) -- calculate the best rational representation n/d of value such that d < maxden mxTidy - Interface to HTML Tidy (HTML/XML cleanup tool) mxTidy provides a Python interface to a thread-safe, library version of the HTML Tidy. command line tool. HTML Tidy helps you to cleanup coding errors in HTML and XML files and produce well-formed HTML, XHTML or XML as output. This allows you to pre-process web-page for inclusion in XML repositories, prepare broken XML files for validation and also makes it possible to write converters from well-known word processing applications such as MS Word to other structured data representations by using XML as intermediate format. mxURL - A fast URL Data-Type mxURL provides a new data-type for storing and manipulating URL values as well as a few helpers related to URL building, encoding and decoding. The main intention of the package is to provide an easy to use, fast and lightweight data-type for Universal Resource Locators (note the W3C now calls these URIs). mxUID - A fast UID Data-Type mxUID provides a fast mechanism for generating universal identification strings (UIDs). The intent is to make these UIDs unique with high probability in order to serve as object or data set identifiers. A typical use lies in generating session IDs. Other areas where unique IDs play an important role are RPC-implementations, ORBs, etc. ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ Note that in order to use the eGenix mx Experimental package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS The mx-Experimental packages uses different licenses in its sub-packages. Please refer to the sub-package documentation for details. Some of them may be integrated into the eGenix mx Base package, others will be integrated into the eGenix mx Commercial package. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:51 2006 Subject: [egenix-users] ANN: eGenix mxODBC Python Database Interface Version 2.0.7 Message-ID: <41B4A6CC.90500@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mxODBC Database Interface Version 2.0.7 Full Source Python extension providing ODBC database connectivity to Python applications on Windows and Unix platforms ________________________________________________________________________ ABOUT The mxODBC Database Interface allows users to easily connect Python applications to just about any database on the market today - on both Windows and Unix platforms in a highly portable and convenient way. This makes mxODBC the ideal basis for writing cross-platform database programs and utilities in Python. mxODBC is included in the eGenix.com mx Commercial Extension Package for Python, the commercial part of the eGenix.com mx Extension Series, a collection of professional quality software tools which enhance Python's usability in many important areas such as ODBC database connectivity, fast text processing, date/time processing and web site programming. The package has proven its stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX COMMERCIAL PACKAGE OVERVIEW mxODBC - High-Performance ODBC 3.5 Interface for Python mxODBC is an extension package that provides a Python Database API compliant interface to ODBC capable database drivers and managers. In addition to the capabilities provided through the standard DB API it also gives access to a rich set of catalog methods which allow you to scan the database for tables, procedures, etc. Furthermore, it uses the mxDateTime package for date/time value interfacing eliminating most of the problems these types normally introduce (other in/output formats are available too). mxODBC allows you to interface to more than one database from one process, making inter-database interfacing very flexible and reliable. The source version includes a variety of pre-configured setups for many commonly used databases such as MySQL, Oracle, Informix, Solid, SAP DB, Sybase ASA and ASE, DBMaker and many more. The pre-compiled versions for Windows and Linux include the interfaces to the standard ODBC manager on these platforms to allow for a more easily configurable setup. More details are available at: http://www.egenix.com/files/python/mxODBC.html ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the package can be found at: http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Packages IMPORTANT: In order to use the eGenix mx Commercial package you will first need to install the eGenix mx Base package which can be downloaded from the same location. ________________________________________________________________________ LICENSES & COSTS mxODBC is distributed under the terms and conditions of the eGenix.com Commercial License. mxODBC is free for use in non-commercial environments. Commercial users may evaluate the product for 30 days following the initial installation. For continued use, commercial users can purchase installation licenses for mxODBC through our secure online shop. We also provide special licensing setups for commercial product developers that want to integrate mxODBC into their products. For full details, please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#BuyLicenses or write to sales@egenix.com. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From mal at egenix.com Mon Dec 6 19:37:52 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:51 2006 Subject: [egenix-users] ANN: eGenix mx Base Package 2.0.6 (mxDateTime, mxTextTools, etc.) Message-ID: <41B4A700.9010806@egenix.com> ________________________________________________________________________ ANNOUNCING eGenix.com mx Base Extension Package Version 2.0.6 Open Source Python extensions providing important and useful services for Python programmers. ________________________________________________________________________ ABOUT The eGenix.com mx Base Extensions for Python are a collection of professional quality software tools which enhance Python's usability in many important areas such as fast text searching, date/time processing and high speed data types. The tools have a proven record of being portable across many Unix and Windows platforms. You can write applications which use the tools on Windows and then run them on Unix platforms without change due to the consistent platform independent interfaces. All available packages have proven their stability and usefulness in many mission critical applications and various commercial settings all around the world. * About Python: Python is an object-oriented Open Source programming language which runs on all modern platforms (http://www.python.org/). By integrating ease-of-use, clarity in coding, enterprise application connectivity and rapid application design, Python establishes an ideal programming platform for todays IT challenges. * About eGenix: eGenix is a consulting and software product company focused on providing professional quality services and products to Python users and developers (http://www.egenix.com/). ________________________________________________________________________ NEWS The new version includes patches needed to compile the package for Python 2.4. It now supports all Python versions 1.5.2 - 2.4. As always we are providing pre-compiled versions of the package for Windows and Linux as well as sources which allow you to install the package on all other supported platforms. ________________________________________________________________________ EGENIX MX BASE PACKAGE OVERVIEW mxDateTime - Generic Date/Time Types mxDateTime is an extension package that provides three new object types, DateTime, DateTimeDelta and RelativeDateTime, which let you store and handle date/time values in a very convenient way. You can add, subtract and even multiply instances, pickle and copy them and convert the results to strings, COM dates, ticks and some other more esoteric values. In addition, there are several convenient constructors and formatters at hand to greatly simplify dealing with dates and times in real-world applications. In addition to providing an easy-to-use Python interface the package also exports a comfortable C API interface for other extensions to build upon. This is especially interesting for database applications which often have to deal with date/time values (the mxODBC package is one example of an extension using this interface). mxTextTools - Fast Text Processing Tools mxTextTools is an extension package for Python that provides several useful functions and types that implement high-performance text manipulation and searching algorithms in addition to a very flexible and extendable state machine, the Tagging Engine, that allows scanning and processing text based on low-level byte-code "programs" written using Python tuples. It gives you access to the speed of C without the need to do any compile and link steps every time you change the parsing description. Applications include parsing structured text, finding and extracting text (either exact or using translation tables) and recombining strings to form new text. mxStack - Fast and Memory-Efficient Stack Type mxStack is an extension package that provides a new object type called Stack. It works much like what you would expect from such a type, having .push() and .pop() methods and focuses on obtaining maximum speed at low memory costs. mxTools - Collection of Additional Built-Ins mxTools is an extension package that includes a collection of handy functions and objects giving additional functionality in form of new built-ins to the Python programmer. The package auto-installs the new functions and objects as built-ins upon first import. This means that they become instantly available to all other modules without any further action on your part. Add the line import NewBuiltins to your site.py script and they will be available to all users at your site as if they were installed in the Python interpreter itself. mxProxy - Generic Proxy Wrapper Type mxProxy is an extension package that provides a new type that is suitable to implement Bastion like features without the need to use restricted execution environments. The type's main features are secure data encapsulation (the hidden objects are not accessible from Python since they are stored in internal C structures), customizable attribute lookup methods and a cleanup protocol that helps in breaking circular references prior to object deletion. In addition to being able to completely hide objects from the Python run-time, the module also provides a generic implementation of weak reference that works for all Python objects. mxBeeBase - On-disk B+Tree Based Database Kit mxBeeBase is a high performance construction kit for disk based indexed databases. It offers components which you can plug together to easily build your own custom mid-sized databases (the current size limit is sizeof(long) which gives you an address range of around 2GB on 32-bit platforms). The two basic building blocks in mxBeeBase are storage and index. Storage is implemented as variable record length data storage with integrated data protection features, automatic data recovery and locking for multi process access. Indexes use a high performance optimized B+Tree implementation built on top of Thomas Niemann's Cookbook B+Tree implementation (http://epaperpress.com/). ________________________________________________________________________ DOWNLOADS The download archives and instructions for installing the packages can be found at: http://www.egenix.com/ ________________________________________________________________________ LICENSES & COSTS The eGenix mx Base package is distributed under the eGenix.com Public License which is a Python 2.0 style Open Source license. You can use the package in both commercial and non-commercial settings without fee or charge. The package comes with full source code ________________________________________________________________________ SUPPORT Commercial quality support for these packages is available from eGenix.com Software GmbH. Please see http://www.egenix.com/files/python/eGenix-mx-Extensions.html#Support for details about our support offerings. -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 06 2004) >>> 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,FreeBSD for free ! :::: From bgibson at us.ibm.com Wed Dec 8 09:56:56 2004 From: bgibson at us.ibm.com (Bob Gibson) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine Message-ID: Am I missing something? It seems that the RelativeDateDiff() routine ignores the actual number of days in the current month when calculating the difference. It seems to use a fixed number of days (30) for each month. Here is a script that supports this theory. ---------------------------------------------------------------------- from mx.DateTime import * # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] stop = Date( 2000, 12, 1 ) finish = stop.strftime( '%m/%d/%Y' ) for mon in range( 11, 0, -1 ) : start = Date( 2000, mon, 2 ) begin = start.strftime( '%m/%d/%Y' ) delta = RelativeDateDiff( stop, start ) correct = actual.pop() print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, delta.months, delta.days, correct ) ---------------------------------------------------------------------- The output of this script is as follows: ---------------------------------------------------------------------- 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] ---------------------------------------------------------------------- The value in brackets '[]' is the correct number of days that should be returned by RelativeDateDiff(), based upon the actual number of days in the specified month. For example, since 2000 was a leap year, there were 29 days in Feb, 2000. So the number of days from Feb 2, 2000 until the 1st of Mar, should be calculated as follows: 29 - 2 + 1 = 28 (# of days in current month) - (current day of current month ) + (# of days into target day in next month) Thanks Bob Ps 37:16 It is better to be godly and have little than to be evil and possess much.-------------- next part -------------- An HTML attachment was scrubbed... URL: /mailman-archives/egenix-users/attachments/20041208/3f39c930/attachment-0139.htm From mal at egenix.com Fri Dec 10 12:03:56 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] Apparent bug in RelativeDateDiff() routine In-Reply-To: References: Message-ID: <41B9829C.4060201@egenix.com> Bob Gibson wrote: > > > > > Am I missing something? It seems that the RelativeDateDiff() routine > ignores the actual number of days in the current month when calculating the > difference. It seems to use a fixed number of days (30) for each month. Thanks for pointing this out. There are a few problems with the algorithm used in RelativeDateDiff(). We should probably find a more robust and faster one. Any suggestions ? Note that the output of the function is not properly defined, since there are many ways you can represent the relative date/time difference between two dates. Here are some requirements: * years should be preferred over months; months over days * all deltas must have the same sign * date2 + RelativeDateDiff(date1,date2) == date1 must hold for all RelativeDateTimeDiff(date1,date2) calls > Here is a script that supports this theory. > > ---------------------------------------------------------------------- > from mx.DateTime import * > > # Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov > actual = [ 30, 28, 30, 29, 30, 29, 30, 30, 29, 30, 29 ] > > stop = Date( 2000, 12, 1 ) > finish = stop.strftime( '%m/%d/%Y' ) > for mon in range( 11, 0, -1 ) : > start = Date( 2000, mon, 2 ) > begin = start.strftime( '%m/%d/%Y' ) > delta = RelativeDateDiff( stop, start ) > correct = actual.pop() > print "%s - %s = %2d months, and %d days [%d]" % ( finish, begin, > delta.months, delta.days, correct ) > ---------------------------------------------------------------------- > > The output of this script is as follows: > ---------------------------------------------------------------------- > 12/01/2000 - 11/02/2000 = 0 months, and 29 days [29] > 12/01/2000 - 10/02/2000 = 1 months, and 29 days [30] > 12/01/2000 - 09/02/2000 = 2 months, and 29 days [29] > 12/01/2000 - 08/02/2000 = 3 months, and 29 days [30] > 12/01/2000 - 07/02/2000 = 4 months, and 29 days [30] > 12/01/2000 - 06/02/2000 = 5 months, and 29 days [29] > 12/01/2000 - 05/02/2000 = 6 months, and 29 days [30] > 12/01/2000 - 04/02/2000 = 7 months, and 29 days [29] > 12/01/2000 - 03/02/2000 = 8 months, and 29 days [30] > 12/01/2000 - 02/02/2000 = 9 months, and 29 days [28] > 12/01/2000 - 01/02/2000 = 10 months, and 29 days [30] > ---------------------------------------------------------------------- > > The value in brackets '[]' is the correct number of days that should be > returned by RelativeDateDiff(), based upon the actual number of days in the > specified month. > > For example, since 2000 was a leap year, there were 29 days in Feb, 2000. > So the number of days from Feb 2, 2000 until the 1st of Mar, should be > calculated as follows: > > 29 - 2 + 1 = 28 > > (# of days in current month) - (current day of current month ) + (# of > days into target day in next month) > > Thanks > Bob > > Ps 37:16 It is better to be godly and have little than to be evil and > possess much. > > > ------------------------------------------------------------------------ > > > _______________________________________________________________________ > eGenix.com User Mailing List http://www.egenix.com/ > http://lists.egenix.com/mailman/listinfo/egenix-users -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 07 2004) >>> 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,FreeBSD for free ! :::: From steve at holdenweb.com Sat Dec 18 12:35:26 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] 2.0.7 Cygwin Differences Message-ID: <41C46A5E.30302@holdenweb.com> Whoops, only just realised I'd been bounced off the list after a change of email address. Anyway, just thought I'd log these necessary changes to have Commercial extensions 2.0.7 compile under cygwin, as they've gone amiss before (in past versions I believe we also had to rename some ".cpp" files to ".c", but it appears that's been handled. diff -rc egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py *** egenix-mx-commercial-2.0.7/mxCOMMERCIAL.py Wed Dec 1 13:10:27 2004 --- egenix-mx-commercial-2.0.7cygwin/mxCOMMERCIAL.py Sat Dec 18 09:56:27 2004 *************** *** 55,61 **** packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win': packages[len(packages):] = [ 'mx.ODBC.Windows' --- 55,61 ---- packages = ['mx.ODBC', 'mx.ODBC.Misc'] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': packages[len(packages):] = [ 'mx.ODBC.Windows' *************** *** 89,95 **** # ext_modules = [] ! if sys.platform[:3] == 'win': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', --- 89,95 ---- # ext_modules = [] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': ext_modules[len(ext_modules):] = [ Extension('mx.ODBC.Windows.mxODBC', *************** *** 167,173 **** ] ! if sys.platform[:3] == 'win': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', --- 167,173 ---- ] ! if sys.platform[:3] == 'win' or sys.platform == 'cygwin': data_files[len(data_files):] = [ 'mx/ODBC/Windows/COPYRIGHT', -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 -------------- next part -------------- An embedded message was scrubbed... From: Steve Holden Subject: 2.0.7 Cygwin Differences Date: Sat, 18 Dec 2004 10:16:22 -0500 Size: 2982 Url: /mailman-archives/egenix-users/attachments/20041218/c8756a2f/null-0139.eml From moof at metamoof.net Mon Dec 20 18:46:53 2004 From: moof at metamoof.net (Moof) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] mxODBC python dbapi compliance Message-ID: <41C7100D.4060800@metamoof.net> Hi there, I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't actually fulfil the spec as stated on PEP 249. Specifically, it's lacking a threadsafety attribute. It has a threadlevel attribute which was in a draft of the spec, but applications that use it (I've been recently lookign at twisted.adbapi) will be expecting a threadsafety attribute. Any chance of getting this corrected? Or am I going to have to purchase a support ticket for a one line modification? Moof -- Giles Antonio Radford - Website down, but take a peek at http://del.icio.us/moof/ The two words that open all doors: "Push" and "Pull" From mal at egenix.com Mon Dec 20 20:35:00 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] mxODBC python dbapi compliance In-Reply-To: <41C7100D.4060800@metamoof.net> References: <41C7100D.4060800@metamoof.net> Message-ID: <41C72964.6080006@egenix.com> Moof wrote: > Hi there, > I've just noticed that while mx.ODBC.Windows.apilevel == '2.0', it doesn't > actually fulfil the spec as stated on PEP 249. > > Specifically, it's lacking a threadsafety attribute. It has a threadlevel > attribute which was in a draft of the spec, but applications that use it > (I've been recently lookign at twisted.adbapi) will be expecting a > threadsafety attribute. > > Any chance of getting this corrected? Or am I going to have to purchase a > support ticket for a one line modification? Good catch :-) You are the first to notice in almost 5 years we had that attribute in there ! We'll fix it in mxODBC 2.1.x which should be released early next year and/or the next 2.0.x release - whichever happens earlier. Until then, here's the diff to apply to all mxODBC.c copies in the egenix-mx-commercial tree: --- ../../../../egenix-mx-commercial-2.0.7/mx/ODBC/mxODBC/mxODBC.c 2003-04-30 11:14:53.000000000+0200 +++ mxODBC.c 2004-12-20 20:32:11.110641549 +0100 @@ -6853,11 +6853,12 @@ MX_EXPORT(void) /* Bind method values */ insint(moddict,"BIND_USING_PYTHONTYPE",MXODBC_BIND_USING_PYTHONTYPE); insint(moddict,"BIND_USING_SQLTYPE",MXODBC_BIND_USING_SQLTYPE); /* DB API 2.0 globals */ - insint(moddict,"threadlevel",MXODBC_THREADLEVEL); + insint(moddict,"threadlevel",MXODBC_THREADLEVEL); /* deprecated ! */ + insint(moddict,"threadsafety",MXODBC_THREADLEVEL); insstr(moddict,"apilevel",MXODBC_APILEVEL); insstr(moddict,"paramstyle","qmark"); /* Type objects */ Py_INCREF(&mxODBC_Type); -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 20 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From mal at egenix.com Wed Dec 22 22:09:01 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] Thanks for a great year and ... Message-ID: <41C9E26D.3010403@egenix.com> Merry Christmas to you all ! Thanks to you - our users, clients and customers - this year has been one of the most successful for eGenix so far. Enjoy your holidays, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 22 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! :::: From Michael at Hipp.com Wed Dec 29 14:57:45 2004 From: Michael at Hipp.com (Michael Hipp) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] Python 2.4 versions? Message-ID: <41D31A49.8010505@Hipp.com> Was just wondering how the Python 2.4 versions are coming (esp. mxDateTime)? Thank you. Michael Hipp Heber Springs, AR, USA From steve at holdenweb.com Fri Dec 31 07:52:56 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D31A49.8010505@Hipp.com> References: <41D31A49.8010505@Hipp.com> Message-ID: <41D54BA8.6090207@holdenweb.com> Michael Hipp wrote: > Was just wondering how the Python 2.4 versions are coming (esp. > mxDateTime)? > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 using the Microsoft free toolset. I'm quite happy to put the base load on my web site until Marc Andre can get it onto egenix, and you can verify it's available for me at http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe before I advertise its presence. Due to the licensing conditions I'm a bit less easy about just shoving out a copy of the commercial installer, so I'll mail that to Marc Andre for inclusion on the Egenix web site. The experimental build fails because it needs lib.exe due to a glitch in the distutils workaround for the Microsoft toolset. It may take a little time for that to come through, as I haven't got it sorted out yet and I'm not (officially ...) working for the next few days. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From steve at holdenweb.com Fri Dec 31 10:39:13 2004 From: steve at holdenweb.com (Steve Holden) Date: Fri Mar 31 16:33:52 2006 Subject: [Fwd: Re: [egenix-users] Python 2.4 versions?] Message-ID: <41D572A1.8050402@holdenweb.com> [Forwarding my private reply to the list, sorry I forgot to Cc] Michael Hipp wrote: > Steve Holden wrote: > >> Michael Hipp wrote: >> >>> Was just wondering how the Python 2.4 versions are coming (esp. >>> mxDateTime)? >>> >> I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 >> using the Microsoft free toolset. I'm quite happy to put the base load >> on my web site until Marc Andre can get it onto egenix, and you can >> verify it's available for me at >> >> http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe >> > > > Steve, > > Thank you. The 'commercial' downloaded fine, but is that what you wanted > me to grab? I'm only in need of 'base' at this time (mxDateTime). > > Michael > > Oh, shit, I meant to put the BASE distribution there [blush]. Right, having *removed* the commercial installer, now see if you can get http://pydish.holdenweb.com/pwp/egenix-mx-base-2.0.6.win32-py2.4.exe Sorry about that. regards Steve -- Steve Holden http://www.holdenweb.com/ Python Web Programming http://pydish.holdenweb.com/ Holden Web LLC +1 703 861 4237 +1 800 494 3119 From mal at egenix.com Fri Dec 31 18:19:28 2004 From: mal at egenix.com (M.-A. Lemburg) Date: Fri Mar 31 16:33:52 2006 Subject: [egenix-users] Python 2.4 versions? In-Reply-To: <41D54BA8.6090207@holdenweb.com> References: <41D31A49.8010505@Hipp.com> <41D54BA8.6090207@holdenweb.com> Message-ID: <41D58A20.3070907@egenix.com> Steve Holden wrote: > Michael Hipp wrote: > >> Was just wondering how the Python 2.4 versions are coming (esp. >> mxDateTime)? These were released a while ago. You can download the 2.4 versions from our web-site. > I've just built egenix-mx-base-2.0.6 and egenix-mx-commercial-2.0.7 > using the Microsoft free toolset. I'm quite happy to put the base load > on my web site until Marc Andre can get it onto egenix, and you can > verify it's available for me at > > http://pydish.holdenweb.com/pwp/egenix-mx-commercial-2.0.7.win32-py2.4.exe > > before I advertise its presence. > > Due to the licensing conditions I'm a bit less easy about just shoving > out a copy of the commercial installer, so I'll mail that to Marc Andre > for inclusion on the Egenix web site. Thanks, Steve. You were right about the licensing issue: the license does not allow redistribution of the egenix-mx-commercial package and this includes putting it on a web-site. You should simply link to: http://www.egenix.com/files/python/eGenix-mx-Extensions.html > The experimental build fails because it needs lib.exe due to a glitch in > the distutils workaround for the Microsoft toolset. It may take a little > time for that to come through, as I haven't got it sorted out yet and > I'm not (officially ...) working for the next few days. We've also released a build of the egenix-mx-experimental package for Python 2.4... I wonder why you didn't get the announcement or see it on our web-site. Happy New Year, -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Dec 31 2004) >>> Python/Zope Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2004-12-06: Released eGenix mx Extensions for Python 2.4 ::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::