I am very pleased to announce that version 0.4.0 of Elixir is now
available. As always, feedback is very welcome, preferably on Elixir
Highlights for this release
- Implemented a new attribute-based syntax to declare fields and relationships,
which is much closer to what is found in other Python ORM's.
- Full support for SQLAlchemy 0.4
- Implemented polymorphic single-table inheritance as well as polymorphic and
non-polymorphic multi-table (aka joined table) inheritance.
- Added versioning extension to keep track to all changes to your entities by
storing them in a secondary table.
- Extended documentation (tutorial and others).
Please see http://elixir.ematia.de/trac/wiki/Migrate03to04 for detailed
The full list of changes can be seen at:
What is Elixir?
Elixir is a declarative layer on top of the SQLAlchemy library. It is
a fairly thin wrapper, which provides the ability to create simple
Python classes that map directly to relational database tables (this
pattern is often referred to as the Active Record design pattern),
providing many of the benefits of traditional databases without losing
the convenience of Python objects.
Elixir is intended to replace the ActiveMapper SQLAlchemy extension,
and the TurboEntity project but does not intend to replace
SQLAlchemy's core features, and instead focuses on providing a simpler
syntax for defining model objects when you do not need the full
expressiveness of SQLAlchemy's manual mapper definitions.
Gaëtan de Menten
I'm pleased to announce Veusz 1.0. Source, windows and linux i386 binaries
are available - Jeremy Sanders
Velvet Ember Under Sky Zenith
Veusz is Copyright (C) 2003-2007 Jeremy Sanders <jeremy(a)jeremysanders.net>
Licenced under the GPL (version 2 or greater).
Veusz is a scientific plotting package written in Python, using PyQt4
for display and user-interfaces, and numpy for handling the numeric
data. Veusz is designed to produce publication-ready Postscript/PDF
output. The user interface aims to be simple, consistent and powerful.
Veusz provides a GUI, command line, embedding and scripting interface
(based on Python) to its plotting facilities. It also allows for
manipulation and editing of datasets.
Feature changes from 0.99.0:
* Import of Text datasets
* Labels can be plotted next to X-Y points
* Numbers can be directly plotted by entering into X-Y datasets as X and Y
* More line styles
* Loaded document and functions are checked for unsafe Python features
* Contours can be labelled with numbers
* 2D dataset creation to make 2D datasets from x, y, z 1D datasets
Bug and minor fixes from 0.99.0:
* Zooming into X-Y images works now
* Contour plots work on datasets with non equal X and Y sizes
* Various fixes for datasets including NaN or Inf
* Large changes to data import filter to support loading strings (and dates
* Reduce number of undo levels for memory/speed
* Text renderer rewritten to be more simple
* Improved error dialogs
* Proper error dialog for invalid loading of documents
Features of package:
* X-Y plots (with errorbars)
* Line and function plots
* Contour plots
* Images (with colour mappings and colorbars)
* Stepped plots (for histograms)
* Fitting functions to data
* Stacked plots and arrays of plots
* Plot keys
* Plot labels
* LaTeX-like formatting for text
* EPS/PDF/PNG export
* Scripting interface
* Dataset creation/manipulation
* Embed Veusz within other programs
* Text, CSV and FITS importing
Python (2.3 or greater required)
Qt >= 4.3 (free edition)
PyQt >= 4.3 (SIP is required to be installed first)
numpy >= 1.0
Microsoft Core Fonts (recommended for nice output)
PyFITS >= 1.1 (optional for FITS import)
For documentation on using Veusz, see the "Documents" directory. The
manual is in pdf, html and text format (generated from docbook).
* Reqires a rather new version of PyQt, otherwise dialogs don't work.
* Can be very slow to plot large datasets if antialiasing is enabled.
Right click on graph and disable antialias to speed up output.
* The embedding interface appears to crash on exiting.
If you enjoy using Veusz, I would love to hear from you. Please join
the mailing lists at
to discuss new features or if you'd like to contribute code. The
latest code can always be found in the SVN repository.
I'm happy to announce the first release candidate of Bazaar 0.92. This
release contains around 30 distinct user visible enhancements and
bug-fixes. There are some substantial improvements to speed,
particularly of commit operations. A new experimental repository format
has been added. Details of the changes are given below.
Bazaar is a fast, friendly and free distributed revision control system
written in Python and available under the GPL v2 or later. See
http://bazaar-vcs.org/ for more details.
The Python source code is available from
http://bazaar-vcs.org/releases/src/bzr-0.92rc1.tar.gz. Packages and
Windows installers will be linked from http://bazaar-vcs.org/Download as
they become available.
This release will become Bazaar 0.92 in about a week, depending on user
feedback. We'd particularly appreciate feedback on use of Bazaar on
non-Linux i386 platforms.
Thank you very much to the many people that have contributed to this
-Andrew, on behalf of the Bazaar team
bzr 0.92rc1 2007-10-29
* ``bzr`` now returns exit code 4 if an internal error occurred, and
3 if a normal error occurred. (Martin Pool)
* ``pull``, ``merge`` and ``push`` will no longer silently correct some
repository index errors that occured as a result of the Weave disk format.
Instead the ``reconcile`` command needs to be run to correct those
problems if they exist (and it has been able to fix most such problems
since bzr 0.8). Some new problems have been identified during this release
and you should run ``bzr check`` once on every repository to see if you
need to reconcile. If you cannot ``pull`` or ``merge`` from a remote
repository due to mismatched parent errors - a symptom of index errors -
you should simply take a full copy of that remote repository to a clean
directory outside any local repositories, then run reconcile on it, and
finally pull from it locally. (And naturally email the repositories owner
to ask them to upgrade and run reconcile).
* New ``knitpack-experimental`` repository format. This is interoperable with
the ``dirstate-tags`` format but uses a smarter storage design that greatly
speeds up many operations, both local and remote. This new format can be
used as an option to the ``init``, ``init-repository`` and ``upgrade``
commands. See http://doc.bazaar-vcs.org/latest/developers/knitpack.html
for further details. (Robert Collins)
* For users of bzr-svn (and those testing the prototype subtree support) that
wish to try packs, a new ``knitpack-subtree-experimental`` format has also
been added. This is interoperable with the ``dirstate-subtrees`` format.
* New ``reconfigure`` command. (Aaron Bentley)
* New ``revert --forget-merges`` command, which removes the record of a pending
merge without affecting the working tree contents. (Martin Pool)
* New ``bzr_remote_path`` configuration variable allows finer control of
remote bzr locations than BZR_REMOTE_PATH environment variable.
* New ``launchpad-login`` command to tell Bazaar your Launchpad
user ID. This can then be used by other functions of the
Launchpad plugin. (James Henstridge)
* Commit in quiet mode is now slightly faster as the information to
output is no longer calculated. (Ian Clatworthy)
* Commit no longer checks for new text keys during insertion when the
revision id was deterministically unique. (Robert Collins)
* Committing a change which is not a merge and does not change the number of
files in the tree is faster by utilising the data about whether files are
changed to determine if the tree is unchanged rather than recalculating
it at the end of the commit process. (Robert Collins)
* Inventory serialisation no longer double-sha's the content.
* Knit text reconstruction now avoids making copies of the lines list for
interim texts when building a single text. The new ``apply_delta`` method
on ``KnitContent`` aids this by allowing modification of the revision id
such objects represent. (Robert Collins)
* Pack indices are now partially parsed for specific key lookup using a
bisection approach. (Robert Collins)
* Partial commits are now approximately 40% faster by walking over the
unselected current tree more efficiently. (Robert Collins)
* XML inventory serialisation takes 20% less time while being stricter about
the contents. (Robert Collins)
* Graph ``heads()`` queries have been fixed to no longer access all history
unnecessarily. (Robert Collins)
* ``bzr+https://`` smart server across https now supported.
(John Ferlito, Martin Pool, #128456)
* Mutt is now a supported mail client; set ``mail_client=mutt`` in your
bazaar.conf and ``send`` will use mutt. (Keir Mierle)
* New option ``-c``/``--change`` for ``merge`` command for cherrypicking
changes from one revision. (Alexander Belchenko, #141368)
* Show encodings, locale and list of plugins in the traceback message.
(Martin Pool, #63894)
* Experimental directory formats can now be marked with
``experimental = True`` during registration. (Ian Clatworthy)
* New *Bazaar in Five Minutes* guide. (Matthew Revell)
* The hooks reference documentation is now converted to html as expected.
* Connection error reporting for the smart server has been fixed to
display a user friendly message instead of a traceback.
(Ian Clatworthy, #115601)
* Make sure to use ``O_BINARY`` when opening files to check their
sha1sum. (Alexander Belchenko, John Arbash Meinel, #153493)
* Fix a problem with Win32 handling of the executable bit.
(John Arbash Meinel, #149113)
* ``bzr+ssh://`` and ``sftp://`` URLs that do not specify ports explicitly
no longer assume that means port 22. This allows people using OpenSSH to
override the default port in their ``~/.ssh/config`` if they wish. This
fixes a bug introduced in bzr 0.91. (Andrew Bennetts, #146715)
* Commands reporting exceptions can now be profiled and still have their
data correctly dumped to a file. For example, a ``bzr commit`` with
no changes still reports the operation as pointless but doing so no
longer throws away the profiling data if this command is run with
``--lsprof-file callgrind.out.ci`` say. (Ian Clatworthy)
* Fallback to ftp when paramiko is not installed and sftp can't be used for
``tests/commands`` so that the test suite is still usable without
(Vincent Ladeuil, #59150)
* Fix commit ordering in corner case. (Aaron Bentley, #94975)
* Fix long standing bug in partial commit when there are renames
left in tree. (Robert Collins, #140419)
* Fix selftest semi-random noise during http related tests.
(Vincent Ladeuil, #140614)
* Fix typo in ftp.py making the reconnection fail on temporary errors.
(Vincent Ladeuil, #154259)
* Fix failing test by comparing real paths to cover the case where the TMPDIR
contains a symbolic link.
(Vincent Ladeuil, #141382).
* Fix log against smart server branches that don't support tags.
(James Westby, #140615)
* Fix pycurl http implementation by defining error codes from
pycurl instead of relying on an old curl definition.
(Vincent Ladeuil, #147530)
* Fix 'unprintable error' message when displaying BzrCheckError and
some other exceptions on Python 2.5.
(Martin Pool, #144633)
* Fix ``Inventory.copy()`` and add test for it. (Jelmer Vernooij)
* Handles default value for ListOption in cmd_commit.
(Vincent Ladeuil, #140432)
* HttpServer and FtpServer need to be closed properly or a listening socket
will remain opened.
(Vincent Ladeuil, #140055)
* Monitor the .bzr directory created in the top level test
directory to detect leaking tests.
(Vincent Ladeuil, #147986)
* The basename, not the full path, is now used when checking whether
the profiling dump file begins with ``callgrind.out`` or not. This
fixes a bug reported by Aaron Bentley on IRC. (Ian Clatworthy)
* Trivial fix for invoking command ``reconfigure`` without arguments.
(Rob Weir, #141629)
* ``WorkingTree.rename_one`` will now raise an error if normalisation of the
new path causes bzr to be unable to access the file. (Robert Collins)
* Correctly detect a NoSuchFile when using a filezilla server. (Gary van der
* ``bzrlib.index.GraphIndex`` now requires a size parameter to the
constructor, for enabling bisection searches. (Robert Collins)
* ``CommitBuilder.record_entry_contents`` now requires the root entry of a
tree be supplied to it, previously failing to do so would trigger a
deprecation warning. (Robert Collins)
* ``KnitVersionedFile.add*`` will no longer cache added records even when
enable_cache() has been called - the caching feature is now exclusively for
reading existing data. (Robert Collins)
* ``ReadOnlyLockError`` is deprecated; ``LockFailed`` is usually more
appropriate. (Martin Pool)
* Removed ``bzrlib.transport.TransportLogger`` - please see the new
``trace+`` transport instead. (Robert Collins)
* Removed previously deprecated varargs interface to ``TestCase.run_bzr`` and
deprecated methods ``TestCase.capture`` and ``TestCase.run_bzr_captured``.
* Removed previous deprecated ``basis_knit`` parameter to the
``KnitVersionedFile`` constructor. (Robert Collins)
* Special purpose method ``TestCase.run_bzr_decode`` is moved to the test_non_ascii
class that needs it.
* The class ``bzrlib.repofmt.knitrepo.KnitRepository3`` has been folded into
``KnitRepository`` by parameters to the constructor. (Robert Collins)
* The ``VersionedFile`` interface now allows content checks to be bypassed
by supplying check_content=False. This saves nearly 30% of the minimum
cost to store a version of a file. (Robert Collins)
* Tree's with bad state such as files with no length or sha will no longer
be silently accepted by the repository XML serialiser. To serialise
inventories without such data, pass working=True to write_inventory.
* ``VersionedFile.fix_parents`` has been removed as a harmful API.
``VersionedFile.join`` will no longer accept different parents on either
side of a join - it will either ignore them, or error, depending on the
implementation. See notes when upgrading for more information.
* ``bzrlib.transport.Transport.put_file`` now returns the number of bytes
put by the method call, to allow avoiding stat-after-write or
housekeeping in callers. (Robert Collins)
* ``bzrlib.xml_serializer.Serializer`` is now responsible for checking that
mandatory attributes are present on serialisation and deserialisation.
This fixes some holes in API usage and allows better separation between
physical storage and object serialisation. (Robert Collins)
* New class ``bzrlib.errors.InternalBzrError`` which is just a convenient
shorthand for deriving from BzrError and setting internal_error = True.
* New method ``bzrlib.mutabletree.update_to_one_parent_via_delta`` for
moving the state of a parent tree to a new version via a delta rather than
a complete replacement tree. (Robert Collins)
* New method ``bzrlib.osutils.minimum_path_selection`` useful for removing
duplication from user input, when a user mentions both a path and an item
contained within that path. (Robert Collins)
* New method ``bzrlib.repository.Repository.is_write_locked`` useful for
determining if a repository is write locked. (Robert Collins)
* New method on ``bzrlib.tree.Tree`` ``path_content_summary`` provides a
tuple containing the key information about a path for commit processing
to complete. (Robert Collins)
* New method on xml serialisers, write_inventory_to_lines, which matches the
API used by knits for adding content. (Robert Collins)
* New module ``bzrlib.bisect_multi`` with generic multiple-bisection-at-once
logic, currently only available for byte-based lookup
(``bisect_multi_bytes``). (Robert Collins)
* New helper ``bzrlib.tuned_gzip.bytes_to_gzip`` which takes a byte string
and returns a gzipped version of the same. This is used to avoid a bunch
of api friction during adding of knit hunks. (Robert Collins)
* New parameter on ``bzrlib.transport.Transport.readv``
``adjust_for_latency`` which changes readv from returning strictly the
requested data to inserted return larger ranges and in forward read order
to reduce the effect of network latency. (Robert Collins)
* New parameter yield_parents on ``Inventory.iter_entries_by_dir`` which
causes the parents of a selected id to be returned recursively, so all the
paths from the root down to each element of selected_file_ids are
returned. (Robert Collins)
* Knit joining has been enhanced to support plain to annotated conversion
and annotated to plain conversion. (Ian Clatworthy)
* The CommitBuilder method ``record_entry_contents`` now returns summary
information about the effect of the commit on the repository. This tuple
contains an inventory delta item if the entry changed from the basis, and a
boolean indicating whether a new file graph node was recorded.
* The python path used in the Makefile can now be overridden.
(Andrew Bennetts, Ian Clatworthy)
* New transport implementation ``trace+`` which is useful for testing,
logging activity taken to its _activity attribute. (Robert Collins)
* When running bzr commands within the test suite, internal exceptions are
not caught and reported in the usual way, but rather allowed to propagate
up and be visible to the test suite. A new API ``run_bzr_catch_user_errors``
makes this behavior available to other users.
* New method ``TestCase.call_catch_warnings`` for testing methods that
raises a Python warning. (Martin Pool)
The 184.108.40.206 release of wxPython is now available for download at
http://wxpython.org/download.php. This release has a number of
important bug fixes and is a general improvement of the 220.127.116.11
Source code is available, as well as binaries for Python 2.3, 2.4 and
2.5, for Windows and Mac, as well some pacakges for various Linux
distributions. A summary of changes is listed below and also at
What is wxPython?
wxPython is a GUI toolkit for the Python programming language. It
allows Python programmers to create programs with a robust, highly
functional graphical user interface, simply and easily. It is
implemented as a Python extension module that wraps the GUI components
of the popular wxWidgets cross platform library, which is written in
wxPython is a cross-platform toolkit. This means that the same program
will usually run on multiple platforms without modifications.
Currently supported platforms are 32-bit Microsoft Windows, most Linux
or other Unix-like systems using GTK2, and Mac OS X 10.3+, in most
cases the native widgets are used on each platform to provide a 100%
native look and feel for the application.
Changes in 18.104.22.168
wxMac: Fixed paste bug when the clipboard contains unicode text.
AUI: Added missing event binders for the notebok tab events.
wxMac: Fixed bug that resulted in portions of virtual listctrl's to
not be repainted when scrolling with PgUp/PgDown/Home/End.
wxMac: Fixed bug that broke tab traversal when tabbing runs into a
wxGTK: Add wx.Window.GetGtkWidget.
All: Undprecated wx.ListCtrl.[G|S]etItemSpacing
All: Fixed wx.Palette constructor wrapper. It takes three seqences of
integers to specify the R, G, and B values for each color in the
palette, which must all be the same length and which must contain
integer values in the range of 0..255 inclusive.
Thanks to some grunt work from Edouard TISSERANT, wxPython now has the
needed tweaks in config.py to be able to be built with mingw32. See
BUILD.txt for details.
Changes in wx.GraphicsContext to make things like the half-pixel
offsets more consistent across platforms.
wxMSW: If freezing a top-level window wxWidgets will actually freeze
the TLW's children instead. This works around a feature of MS Windows
that allowed windows beneath the frozen one in Z-order to paint
through, and also mouse events clicking through to the lower window.
http://wxPython.org Java give you jitters? Relax with wxPython!
New meeting of the Python North-West UK community!
This month's talk is:
- Michael Sparks on "Greylisting with Kamaelia" - dramatic spam
reduction with a few lines of Python.
After the talk, you'll be able to showcase your cool python stuff, get
tips from others, have a chat with fellow-minded python geeks... and
relax with free refreshments and nibbles. Free wifi will also be
The meeting will start at 18.30 at the Manchester Digital Development
Lower Ground Floor, 117-119 Portland Street,
Manchester, England M1 6ED.
Thanks to the MDDA folks, who again let us use their facilities free
Location map and further details are at
http://upcoming.yahoo.com/event/303512. If can't find the venue on
the day, call 0779 6690731 and we'll rescue you.
If you want to give a second (brief) talk at this meeting (or the main
talk at the next one, why not...), please post the idea on the mailing
list (http://groups.google.com/group/python-north-west) or mail
Subscribe to the Python North-West Google Calendar (linked at
http://groups.google.com/group/python-north-west in various formats)
to get notified of all future meetings and events.
I Just recently registered a project fclient to sourceforge.net
[http://sourceforge.net/projects/fclient]. fclient is intended to
become desktop client for the freenet [freenetproject.org]
network written in python and Qt4.
fclient is very alpha, in fact only parts of the freenet client
are curently implementated and loads of work ahead. But I would
appreciate very much finding interested co-coders to take part in the
Me, I am no professional coder, but an enthusiast with one or the
of python (and Qt) experience. If interested in the project (and
freenet), feel free
to drop a mail to the users mailing list at the project page.
Have fun, Juergen
what is it
A Python package to parse and build CSS Cascading Style Sheets.
changes since 0.9.4a1
for full details see the relevant README file
- **FEATURE**: added ``Preferences.useMinified()`` which sets
preferences that a stylesheet will be serialized as compact as possible.
Added ``Preferences.useDefaults()`` which resets the serializer
preferences. There a few new preferences have been added as well (see
the documentation for details as most are hardly useful for normal usage
of the library)
+ **BUGFIX**: Fixed parsing of ``font`` value which uses
- CHANGE: ``Preferences.keepAllProperties`` defaults to ``True`` now
(hardly used but safer if different values have been set which are used
by different UAs for example.)
cssutils is published under the LGPL.
for download options for cssutils 0.9.4a2 - 071027 see
* Python 2.4 or higher (tested with Python 2.5 on Vista only)
bug reports, comments, etc are very much appreciated!
The second beta version of Browsershots 0.4 has been released under
the GNU GPL (Version 3) today. Browsershots is a distributed system
for automatically making screenshots of web content in different
browsers. Both the server and the screenshot factory software are
written in Python.
Version 0.4 is a full rewrite of Browsershots, based on the Django
framework. It is still not feature complete, but already quite usable.
The public demo at browsershots.org is running the latest trunk code
with more than 5,000 visits (50,000 pageviews) per day.
Version 0.3 has been retired after the release of 0.3.0 which was
Highlights of this release:
The source code was updated to work with the latest Django. Several
language translations were added. The biggest new features are
self-registration for new users and standalone mode for the screenshot
Summary of changes since 0.4-alpha1:
* Improved documentation.
* Updated to latest Django.
* Added several languages and improved existing translations.
* Less output for ShotFactory if not running --verbose.
*  Display ads on the site, if configured in settings.py.
*  Fixed queue estimates (added missing platform clause).
*  Use RequestContext everywhere.
*  Self-registration for new users, with email verification.
*  Show heavy users at /status/usage/ (login required).
*  Show volunteers with 4800 or more uploads per day on the front page.
*  Don't save page content in the website table.
*  Show server status overview at /status/ (login required).
*  Added browser and OS icons (collected by Marcin Król).
*  Script to delete old screenshots until we have sufficient
free disk space.
*  Added long options for the command line,
see shotfactory.py --help for a complete list.
*  Let factory admins add and remove screen sizes and color depths.
* Added ShotFactoryStandalone features for operation without a ShotServer.
*  More helpful error page for unknown URLs.
*  Improved delete_if_exists() to allow shell wildcards.
*  Added reset_browser() for all browsers.
*  Added scroll_bottom() for all browsers.
Timeline (history) and roadmap (future):
Browsershots is a distributed system for automatically making
screenshots of web content in different browsers. Its goal is to make
it easier to test the compatibility of Web pages with a variety of
browsers. The system distributes the work among home computers that
are run by volunteers.