Aquarium is a framework for creating highly-dynamic, custom Web application in Python. It offers convenient libraries, tight integration with Cheetah, adaptors for various Web environments, and a convenient approach to Web development.
Be the first to post a text review of Aquarium Web Application Framework. Rate and review a project by clicking thumbs up or thumbs down in the right column.
INCOMPATIBLE CHANGES ==================== ctx.cookie has now been broken up into ctx.request.cookie and ctx.response.cookie. If you're using cookies, you'll need to update your code. Changed the stripAction parameter to Controller's getBookmark. Now, by default getBookmark strips the action if the request method is GET. To get the old behavior, always pass a value for stripAction. OTHER CHANGES ============= The default Cheetah cache has been moved into the current directory, out of $HOME. Added support for streaming (i.e. generating possibly infinitely long data responses without buffering). Added all sorts of caching support (in favor or against) to Bare, the superclass layout. It now understands If-Modified-Since. Added support for parsing and doing interesting things with the following headers: Accept-Language, basic HTTP auth, Host, If-Modified-Since. Added a blank_html screen. Added some support for creating wizards. Submitted by: bvanzant Finallly addressed the whole issue with escaping or not escaping ampersands in URLS. See aquarium/urlscheme/EscapingAmpersands.py. UrlScheme modules can now return (screenName, args, kargs) if they want to. Changed the way initialization gets done to use my cool new TryFinally library. Added jsEsc and jsQuote to ctx. Added ctx.iLib.redirectTemporary. aquarium.widget.Truncate is now more featureful. Finally commited the Aquarium tutorial in the demo directory. Added a virtual filesystem layer to Glass. This lets me serve content directly from a zip. Glass now has the ability to "mount" multiple "virtual filesystems" at the same point in the URL hierarchy. This works like a search path.
The treatment of MySQL timestamps was broken in aquarium/database/mysql/Session.py. Submitted by: Jeffrey Wescott
INCOMPATIBLE CHANGES ==================== Be sure to delete your old copy of "aquarium" and "glass" from Python's site-packages directory. Be sure to delete your Cheetah cache. In getBookmark, stripAction has a new default. By default, stripAction is True if the request method is not GET. This makes things a bit more friendly for the programmers who want to use actions as subpages in the same class. I am not wholly endorsing this technique yet, however. Aquarium no longer calls commit in screenLoop. This wasn't really fully hashed out anyway. This is up to the app developer to do. I suggest you put it in your superclass for your controllers. Suggested by: Jeffrey Wescott OTHER CHANGES ============= Made it possible to store really big sessions in MySQL. Suggested by: Jeffrey Wescott Put a new class between the Bare layout and the CssAndJavaScript layout called HTML that lets you output all your own HTML. The not_found screen now shows the exception that led to it. The exception screen now also logs the exception, thanks to its new superclass. The not_found screen doesn't log exceptions, because it's really irritating, especially if you don't have a favicon.ico. It's also now possible to turn off the display of exceptions via setting properties.SHOW_EXCEPTIONS to False. Suggested by: Robert Leftwich In DatabaseSessionContainer, pickles can now be stored in binary. Suggested by: Jeffrey Wescott Reverse proxying now "just works" without needing to do anything to Aquarium. In Aquarium.py, if you make it through initAll, make sure to call catchAll. If an exception gets raised in catchAll, log it and keep going. Try to give everything a chance to cleanup. Suggested by: Jeffrey Wescott Changed the double exception error message to something a little more professional. Content by: Paul Lorence AutoLoader didn't work at all unless you used on of its subclasses. Submitted by: Jeffrey Wescott AutoLoader and HasFriends should not autoload attributes that start with "_". Raise attribute error instead. Bug submitted by: Jeffrey Wescott Add border="0" to $cell0. Suggested by: Brandon Golm It's useless to print the screenInstance in Context.__repr__. This was dying when used with the newest version of Cheetah. Submitted by: Kyle Vanderbeek In FormValid, added a FieldList class which allows validating rows of columns of data. Submitted by: Bob Van Zant Overhauled how clearModules and aquariumFactory work. This fixed the "parent template not reloaded" bug. This also fixed various bugs only seen in Windows. Led by: Robert Leftwich If you delete a .py or .pyc from underneath Aquarium, Aquarium no longer chokes. Bug submitted by: Krishna Srinivasan I was using cacheByArgs wrong. It was acting the way I wanted it to act; unfortunately, the cache was also growing without bounds. I fixed it, and documented how to avoid this error in the future. You can pound the site really hard now without memory usage changing. Bug submitted by: Andrew Flury Documented which urlscheme modules can be used with which wsadaptors. Suggested by: Oleksandr Sukholeyster Seamstress Exchange no longer relies on the HOME environmental variable. Bug submitted by: Anthony Eden Fixed another disconnect error special case in Glass. Bug submitted by: Krishna Srinivasan Fixed a typo in Glass that led to an exception instead of a warning, as it should have. Bug submitted by: Krishna Srinivasan Fixed an early socket error special case in Glass. Bug submitted by: Krishna Srinivasan The default doc_root in Glass is now the current directory. Several small documentation updates were made for new users. Suggested by: Anthony Eden Much better handling of dictionaries in FormUtil. Submitted by: Bob Van Zant Included a MySQLdb compatibility workaround. Bug submitted by: Jeffrey Wescott
INCOMPATIBLE CHANGES ==================== None OTHER CHANGES ============= If neither "AQUARIUM_PACKAGE_PATH" nor "__main__.packagePath" is set, but there is a directory named "site-packages" in the current directory, use that for "packagePath". This makes the common case convenient as well. Improved the "Getting Started" documentation. By changing about 50 lines of code, Aquarium is now 4 times faster, and page loads in the Seamstress Exchange demo application only take about 12 milliseconds with a concurrency of 20 on my Dell Latitude D600. Fixed several small bugs found by Krishna. Aquarium now automatically clears out stale gettext translations. By default, it does this if "properties.USE_GETTEXT" and "properties.CLEAR_MODULES" are both True.
INCOMPATIBLE CHANGES ==================== Got rid of the string "exception DatabaseAssistant.EXPECTED_RECORD_NOT_FOUND" in favor of a class based exception named "MissingRecordError". If you had code to catch this exception before, you'll need to update it. The "not_found" screen now receives the entire "exc_info" tuple instead of just the exception. If you have a custom "not_found" screen, you'll need to update it. Concerning I18N, thanks to recent changes I made to Cheetah, using '$_("translate me!")' in Cheetah templates works now. You no longer need to use a local variable for "_", nor do you have to avoid using the NameMapper to look it up. OTHER CHANGES ============= Added Glass, a small Web server based on the Python standard library. Glass is very flexible, and has great support for Aquarium. Converted all documentation to reStructuredText and cross referenced the documentation like crazy. Heroic efforts were made to improve the documentation. These were mostly led by Vicki Brown. Seamstress Exchange, the demo application, is now based on Glass and runs right out of the distribution using MySQL's test database. It even automatically loads the schema. A new AquariumProperty was added, "SET_COOKIE_EXPIRATION", "Set the cookie to expire based on MAXIMUM_SESSION_LIFETIME? If 0, the default, let the cookie continue exactly until the user closes his browser." The exception screen now also writes the exception to stderr in the hopes that it will be useful. Both simplified and greatly improved how to output exceptions. The "not_found" screen now outputs a traceback in an HTML comment to help the developer find the actual problem. It is now possible for subclasses of "SessionContainer" to mixin "AquariumClass". Added "screenList" to "ctx". "aquarium.util.Aquarium.screenLoop" will add the name of the screen it is about to execute to this list before attempting to execute it. If "properties.USE_GETTEXT" is False, use "noop" replacements for "_" and "ngettext". That way, your code will work even if you use "_()" with gettext turned off. Added additional gettext related function to "ctx". In "FormValid", if you've specified a validator on a value that is a dict, it will automatically apply the validation method to all of the values in the dict. Future enhancements include handling lists of dicts. Added "iLib.redirectSeeOther". This is a convenience method for: import HTTPResponses url = ctx.url.screen(screen, *args, **kargs) ctx.iLib.redirect(url, HTTPResponses.SEE_OTHER) Made some improvements to the "form fields -> [] or {}" feature, but work is not done. In the wsadaptors documented the minimal entry point. This will help the user get started with using such wsadaptors. Completely overhauled the "ModPythonAdaptor". There's now a top-level handler method. There's no longer a need for a separate entry point. HTTP status codes now work. There are no unsafe imports. Documented how to setup Apache, a bit. Documented SELinux woes. You can now set "AQUARIUM_PACKAGE_PATH" via a mod_python "PythonOption". Got rid of all the special "FieldStorage" stuff. This will probably make this module a lot faster! Improved the I18N in the Seamstress Exchange demo, but also removed most of it for readability. Plurals now work. Switched from pygettext to xgettext in order to support plurals. Added a Japanese translation of the one string marked for translation. I radically changed the implementation of "InternalLibrary.clearModules" and the meaning of "properties.CLEAR_MODULES". "properties.CLEAR_MODULES" may still be a boolean, but it may now also be a list of modules types to automatically clear. If any one of these modules is stale, all of them will be reloaded. Modules not covered by the list will *never* get reloaded, as they might contain state. Added a new database session container originally submitted by Jeffrey Wescott. "SessionContainer._exists" should imply not "SessionContainer._isExpired". If you've created your own session container, should now implement that. "aquarium/widget/ThousandsCommas.py" adds commas to a number. It was originally submitted by Michael Olivier. Added a wsadaptor for FastCGI originally submitted by Jeffrey Wescott. Added a new wsadaptor for Glass, this replaces "PyScriptAdaptor".
Copyright © 2009 Geeknet, Inc. All rights reserved. Terms of Use
Thanks for your rating!
Would you also like to write a review?