Announcement! Epsilon Strikes Back

There's a new release of Epsilon today.

As it seems to happen every release, we added some new features in the course of doing the release itself. This release's showcased new feature: setuphelper.autosetup().

A normal project's setup.py might look like this:

from distutils.core import setup
setup(name="MySpiffyProject", version="1.2.3",
packages=['mypackage', 'otherpackage'],
package_data=dict(
mypackage=['data/static.png', 'data/static.html'],
otherpackage=['templates/*.kid']))

Now, this is somewhat fragile and error-prone. You can easily forget code which is supposed to be installed. Each new release requires the release manager to scour the directory tree for new files which might be required.

Twisted has a fairly baroque setup.py which deals with this problem, among other things. However, Twisted's setup.py (and other projects' as well) are rarely designed for re-use. Twisted has, in fact, entirely given up on setup.py sdist for generating releases.

Enter Epsilon's autosetup() - that same setup.py with Epsilon would look like this:

from epsilon.setuphelper import autosetup
from myproject import version

autosetup(name="MySpiffyProject", version=version.short())


These helpers make release maintenance a lot easier. You no longer need to:

  • update your setup.py with each release: just the project's version number.

  • manually identify what files are required for the project to run: if it's in a Python package directory, the assumption is that it's there for a good reason

  • update your setup.py when you add new files

  • regenerate Twisted plugins caches post-installation


I need to look at setuptools and see if these concepts can be re-applied. If we're lucky they'll be unnecessary there, but just a little bit of automation has gone a long way so far.

Today while helping a friend, I was exposed to PH...

Today while helping a friend, I was exposed to PHP's answer to unicode and encodings. Ahem, I'm sorry. multibyte strings.

Some days I cannot help but be amazed at how much better Python is than anything else available today. Obviously PHP is garbage, but the reason I thought to disturb you with this posting, dear reader, was this gem in the comments section of the documentation:
Setting mbstring.func_overload = 2 may break your applications that deal with binary data.
What is it, 1975? We are still writing - not even applications - systems that break when presented with data that has the high bit set??? Maybe we need a new HTTP request header, like the BINARY command in FTP.

Apparently there is something in the works for the next release - PHP6 or so - which will actually deal with unicode more sanely. I haven't looked at it but I am foolishly giving them the benefit of the doubt. So, cool. Maybe that release will also include a way to access "high memory" so I can get at more than 640K of HTML at a time!

Divmod Axiom release 0.2.0 indicates that when I herald something it is <em>heralded</em>

The dawning of a new age is nigh. It couldn't be nigher.

Today we released an update to the Axiom package.

This new release of Axiom includes two new features, better documentation, and the usual smattering of bugfixes.

The big news is that upgrades will happen automatically in servers which start an Axiom database's root service. No new versions of Axiom objects were included in this release, so you'll have to try it on your own objects, but it means that when new versions come out, there is no operational component to running an upgrade. Simply stop, upgrade code, restart. Even with a novice sysadmin, even major upgrades will trigger only seconds of downtime. (Assuming you've tested your upgraders first - but then, you always write tests, right?)

We also added a method 'oneOf', which allows you to make use of the basic 'IN' SQL statement. Now you don't need to do multiple '==' queries when you want to find a group of related of items at once.

The argument to 'query' now has a much easier to understand interface.

We've pointed our website at the 'trac' wiki, and I've also added quite a bit of content to that area, including a bit about why you'd want to use axiom on the page "Why use Axiom?"

Divmod Epsilon release 0.2.1 heralds a new golden age of computing

Today, we released an update to the Epsilon package.

As JP's previous release-storm might imply, there is some more good stuff coming. In the immortal words of the Space Harrier, "Get Ready!"

This release of Epsilon includes a new utility, ModalType. A ModalType is a variant of a simple state machine which allows you to provide different implementations of the 'same' method for different 'modes' your instances can be toggled into. ModalType is generally useful for managing the life-cycle of objects which need to queue up requests while they are deactivated, and combined with some simple input/output handling it can be used to implement extremely flexible DFAs.

Also, as a convenience developed during releasing Epsilon itself, a new feature for Version which makes it more convenient for use within distutils scripts; no more running regular expressions over your setup.py every time you do a release, or changing a version number in 6 different places!

We've also started cleaning up and documenting our release procedure a bit.

He is unstoppable!

When Divmod ran out of things to release, what does a man of action such as JP Calderone do? He finds another project to release. Twisted Names. Twisted Mail. I imagine he is like a Pokémon trainer, marshalling his release announcements for battle.

Now it's up to you - you've gotta catch 'em all.

"gotta catch 'em all" is probably a trademark of those bastards at Nintendo Corporation or something, maybe. Surprisingly enough, used without permission.