When I announced BDBDatastore just a few days ago, it was still a ways away from being practically usable for anyone wanting to develop or deploy App Engine apps. The purpose of the post was twofold: To attract some initial interest, and to motivate me, with the light of public scrutiny, to make sure it gets finished and polished.
I'm pleased to say that release 0.1 is now available. Version 0.1 brings BDBDatastore to parity with the feature set the App Engine datastore had on release day - that is to say, fully featured except for __key__ queries. Along with the server itself, I've also provided a patch to the App Engine SDK that allows you to tell the Python dev_appserver to use BDBDatastore for backend storage.
Full installation and usage instructions can be found on the wiki. Note that this release is still very much beta. It shouldn't break, but it might (and if it does, please let me know). It's also possible (likely, even) that the datastore will change in backwards-incompatible ways between now and 1.0.
As always, feedback and comments are appreciated.
I'm of two minds on this. On the one hand, I don't think it's justified to call this "lock-in" - Google has provided ample documentation of the runtime environment and the APIs available, and where documentation isn't available, the SDK source code is, so it's possible to figure out everything necessary to produce compatible interfaces with publicly available information alone, and without resorting to reverse engineering or any other gray areas.
On the other hand, while I don't think there's intentional lock-in, the lack of available alternatives amounts to practical lock-in. While moving your app off Google infrastructure would require implementing the new infrastructure yourself, this amounts to lock-in for the vast majority of people, who can't afford the time and resources required to implement such a thing themselves.
The key to making portability possible is the datastore. Of all the APIs App ... Bloog, a blog platform written for App Engine. Before doing so, though, I made some fairly significant changes and improvements, including:
- A Serendipity uploader script (so I can import my old articles).
- (Limited) unit-testing.
- A bunch of improvements suggested by Matteo Crippa, including:
- Gravatar support.
- SEO improvements.
- Sitemap support.
- Theme inheritance, so new themes can be defined that make only minor modifications to existing ones, without needing to copy the entire theme.
- Support for FirePython logging when logged in as an administrator.
- Improvements to how comments and posts are stored and retrieved.
- The option to use a Google Custom Search Engine instead of the built-in search.
- Many code cleanups and minor bugfixes.
All my work is available in my own Github branch here. It has several branches; 'master' contains non-breaking changes from the original Bloog, 'breaking' consists of master plus any changes that are likely to break backwards compatibility or require running an upgrade script. 'matteocrippa.it' contains ... smtp2web, a simple service that accepts mail for an address (or your entire domain), and sends it via HTTP POST to a URL you specify. If you're running in a restricted environment such as App Engine, this means you can now receive email. Even if you're not, this is a lot simpler to use than writing your own SMTP server (or adding custom handlers to most existing servers).
Someone's already blogged about it, too. Newer