Fixed the DateTime value range to only cover dates which can be
represented as broken down values. On 32-bit systems, the valid range
now is from -5879608-01-01 to 5879609-12-31, on 64-bit systems from
-25252734927766552-01-01 to 25252734927766553-12-31.Should be enough for most needs :-)
Fixed the DateTimeDelta value range to only cover deltas which can be
represented as broken down values. On 32-bit systems, the valid range
now is from -2147483647:00:00:00.00 to 2147483647:00:00:00.00, on 64-bit
systems from -104249991374:07:36:32.00 to 104249991374:07:36:32.00.
Fixed a segfault on Windows when using .strftime() on a DateTime object
with leap seconds. mxDateTime will now raise a ValueError instead, since
the Windows C runtime strftime() doesn't handle leap seconds and
Fixed a segfault on Windows when using .strftime() with an unsupported
formatting code (e.g. %f). mxDateTime will now raise a ValueError
instead, since the Windows C runtime strftime() doesn't like unsupported
formatting codes or lone % at the end of the format string and causes a
segfault. Thanks to Barry B for reporting this.
Fixes for Python Debug Builds
In this patch level release, we have significantly improved the compatibility of eGenix mx Base with Python debug builds, which we previously did not support. Regular Python builds are usually not affected.
Fixed crashes of several mx Base packages when using Python debug builds, which were due to the use of free lists. Free lists are disabled for Python debug builds now.
Several mx Base packages crashed during interpreter shutdown when using Python debug builds.
mxBeeBase: Fixed a memory allocation error when using Python debug builds.
mxDateTime crashed when using Python debug builds due to the use of free
lists and a non-standard way of dealing with errors inside object
constructors, bypassing the logic used by debug builds to trace object
allocation. Thanks to Edson Tadeu M. Manoel for bringing this to our
mxTools: Fix a segfault in napply() when using Python debug builds.
Installation Enhancements and Fixes (via included mxSetup)
Most of these enhancements and fixes are part of the Python web installer support we added to mxSetup a while ago. If you want to learn more about this web installer technology, please see this talk on the topic.
Fixed traceback when building pure Python packages with mxSetup's bdist_prebuilt.
mxSetup's web installer now searches for "purepython" and
"anyos" tags as fallback when looking for OS dependent packages. It also
adds the "anyos" tag to all pure Python packages.
Refactored the web installer in mxSetup into a class for easier customization.
Added --unicode-aware parameter support to bdist_egg when used with setuptools.
mxSetup now always produces PEP 440 compatible version numbers (using mx_version()).
Prebuilt archives created on Linux2 will now load fine on Linux3
machines. Same for FreeBSD and other systems which retain backwards
Prebuilt archives will now also be usable on compatible
platforms, e.g. ones compiled on linux2 with linux3 systems and ones for
freebsd8 with freebsd9 or freebsd10.
Fixed a bug in mxSetup which caused .pyc/.pyo not to get removed when using 'pip uninstall'.
Resolved an intermittent error related to hash seeds which
sometimes caused prebuilt archives to not install correctly. Thanks to
Albert-Jan Roskam for reporting this.
Added Raspberry Pi Ver. 2 support to mxSetup.
Added support for bdist_wheels to allow building wheels from source or from prebuilt packages using mxSetup.
Removed a spurious AttributeError warning showing up when
installing egenix-mx-base prebuilt packages on Windows systems without C
Added web installer support to mxSetup, the distutils extension module which drives all our product installations.
Uploaded web installer package to PyPI which simplifies installation.
In addition to the usual ways of installing eGenix mx Base, we have uploaded a
web installer to PyPI, so that it is now also possible to use one of
these installation methods on all supported platforms (Windows, Linux,
FreeBSD, Mac OS X):
easy_install egenix-mx-base via PyPI
pip install egenix-mx-base via PyPI
egenix-mx-base egg reference in zc.buildout via PyPI
running "python setup.py install" in the unzipped web installer archive directory
The web installer will automatically detect the platform and choose
the right binary download package for you. All downloads are verified
mxDateTime: Protected delta.strftime() against segfaults on Windows, which only
allows day values <= 31 and segfaults for higher values. Thanks to
Frank Boje for reporting this problem.
mxTextTools: Fixed a double decref in the tagging engine that surfaced when using
custom tag objects and appending the results to them. Thanks to Richard
Moseley for the report.
Prepared eGenix mx Base for two digit Python patch level numbers such as Python 2.7.10
mxBeeBase: Fixed a problem with using larger BeeDict keysizes on 64-bit platforms.
These now work for keysizes between 25 and 659 characters as well. Also
extended the possible keysizes for 32-bit platform to 670 characters. Thanks to Andrey Rzhetsky for pointing us to the problem.
mx.Misc.FileLock: Fixed a typo in a FileLock class name.
mxURL: Added a work-around to resolve a segfault
when exiting the Python 2.7.4 interpreter. This is a Python bug which
was introduced in Python 2.7.4 and will get fixed again in Python
2.7.5 - see http://bugs.python.org/issue17703.
mxURL: Added sections on URL join operations and interaction with strings to mxURL documentation.
mxDateTime: Added notice to documentation that .gmtoffset() can give wrong results during DST switching time.
Filled the tp_methods slot of all extension types to improve Python 2.7 compatibility.
Added download URL registered with PyPI is now a static page and includes an MD5 hash tag to allow verification of the page.
All distribution files are GPG signed with our release key. We also provide MD5 and SHA1 hash values for all files to easily verify the downloads.
Fixed a compatibility problem with Python 2.7.3 on Mac OS X 10.6 and later:
Removed mx_customize_compiler() in favor of the standard distutils
customize_compiler(). It now installs fine again with pip on more recent
Mac OS X versions. Thanks to Leonardo Santagada for bringing this
problem to our attention.
mxDateTime: Fixed a possible segfault in mxDateTime that was caused by the lazy datetime module
import mechanism not catching all cases where the C API was used in
mxDateTime. Thanks to Joel Rosdahl for bringing this to our attention.
Fixed a bug in the mx.Misc.CSV.Reader.objects() method, which triggered a TypeError.
Fixed a problem with mxBeeBase on BSD-based platforms such as
FreeBSD and Mac OS X: file system synchronization problems between read
and writes could cause data corruption. Thanks to Ernesto Picardi for
bringing this to our attention.
Updated mxSetup to our latest version with platform mismatch detection for prebuilt archives.
Changes from 3.1.1 to 3.1.2
Changed the way pre-built state is restored during
installation to handle situations where the distutils platform string
is different between the build platform and the installation platform
(e.g. for Mac OS X fat builds).
Changes from 3.1.0 to 3.1.1
Fixed a problem with the pre-built packages not installing on Mac OS X and older Linux distributions.
Verified and tested all packages with Python 2.6.
Changes from 3.0.0 to 3.1.0
mxSetup bdist_wininst will now always include the Python
version number if you build pure Python distributions that don't
include the Python source
mxSetup clean command will now also remove the build pickle used for e.g. bdist_prebuilt.
mxSetup bdist_prebuilt will now create platform independent archives for packages that don't include any C extensions.
mxSetup prebuilt archives no longer need to use "... build --skip ..."
to skip the build process. The build command is now smart enough to
detect, check and automatically use a build pickle and the prebuilt
Added setuptools support, ie. mxSetup can run with an installed setuptools to e.g. create eggs. Running python setup.py --use-setuptools bdist_egg will create an .egg file in the dist/ directory. If you want to convert a prebuilt archive to an egg, run the command with bdist_egg --skip-build.
a problem in mxSetup that caused the uninstall command not to work with
prebuilt packages. Thanks to Wouter van Atteveldt for pointing out the
Added new mx.Misc.CSV module for reading and writing CSV files.
Changes from 2.0.5 to 3.0.0
Fixed the distutils setup to now allow defining compiler
options on the command line using 'python setup.py mx_autoconf
Lots of changes in the various sub-packages. See the sub-package documentation for a full list of new features.
Added source code encoding markers to those files that need it.
Moved mxURL and mxUID from the Experimental Distribution to the Base Distribution.
Added better support for Python DEBUG builds. The total reference
counting should now also work in case object constructors raise
Added Python 2.4 and 2.5 support.
Changes from 2.0.4 to 2.0.5
Added Python 2.3 support.
Changes from 2.0.3 to 2.0.4
RPMs now install to /usr/ instead of /usr/local/. This change was necessary to resynch to the standard Python RPMs.
The mx distutils build system was updated to the latest version.
Changes from 2.0.2 to 2.0.3
Some cleanup of assignments to __debug__ which cause warnings in Python 2.1.
Added some missing header files. These are needed by third party tools in case they rely on the provided C interfaces.
Changed the error class object fullnames to properly include the complete package path.
Corrected a bug in the free list management of the various types which showed up when using pymalloc.
Prepared the tools for Python 2.2.
Changes from 2.0.1 to 2.0.2
Added compiler support for Cygwin. Thanks to Mark Hadfield for pointing out the necessary changes.
Reworked the RPM packaging for different Python versions: you
can now install the RPMs for different Python versions side-by-side.
Updated a few packages, e.g. the mxDateTime package.
Changes from 2.0.0 to 2.0.1
Added back .h header files to the mx-subdirectories.
Third-party software was relying on these files, but the distutils
process did not include them per default.