Flexible static resources for web applications.
Fanstatic is a smart static resource publisher for Python. For more information on what it’s about and how to use it, see: http://fanstatic.org
- Documentation fix in code samples, thanks to Toby Dacre.
- Fix issue #74, minified .js not served in bottom unless force_bottom, thanks to Toby Dacre.
- Cherry picked pull request #1 “support-wsgi-apps-not-mounted-at-/”, thanks to Éric Lemoine.
- Add print css renderer.
There was another bug with ordering resources when multiple libraries were involved. This time the way library_nr was calculated was changed so that it wouldn’t happen anymore.
The intent of library_nr was to have it always be 1 higher than the maximum library_nr of any libraries this library is based on.
In practice this wouldn’t always happen, because each resource had its own library_nr. In some circumstances the resources in libraries depending on other libraries would consistently get a library_nr too low, as each resource they were based on had a library_nr that was too low as well, even though another resource could exist in that library with a higher library_nr. This could cause the library_nr of all resources in a library to be too low.
This is now fixed to moving library_nr to the place it should’ve maintained on in the first place: the library itself. It is calculated now once per library, just before the resources are sorted for the first time during the application’s run. Since by the time resources need to be sorted all resources are known, the library_nr can be calculated correctly.
- There was a bug with ordering resources when multiple libraries are involved: https://bitbucket.org/fanstatic/fanstatic/issue/67/ordering-of-resources-when-multiple
- Update the docs for readthedocs.org.
- Consolidate the resources (find rollups) before applying the mode.
- Add bundling support: bundles are collections of Resources that can be served in one HTTP request. Bundle URLs are constructed by the fanstatic injector and served by the fanstatic publisher.
- Remove eager_superseder arguments from Resource, as this was not used.
- Abstracted features of Resource, Group, Bundle into base classes Renderable and Dependable.
- Improved sorting of resources for inclusion on web page. This is to prepare for bundling support. Ordering is now more consistent, no matter in which order resources are .needed(). As long as you marked dependencies right this shouldn’t break applications; if your resources are included in the wrong order now, fix resource dependencies.
- base_url is not required anymore (as in the past); improve base_url management API so that integration packages like zope.fanstatic have a more explicit way to manage this information.
- Resources check whether the file they refer to exists or not. If the file doesn’t exist you get an UnknownResourceError.
- Renamed UnknownResourceExtension exception to UnknownResourceExtensionError. The old exception name is still available for backwards compatibility.
- Use mtime instead of md5 for determining speeds up version computation during development. The hashing method is still available for people who don’t trust their filesystem using the versioning_use_md5 parameter.
- Fixed issue #49.
- Renamed hashing to versioning. Use the version of the python package as the version identifier for a Library, unless the package is installed in development mode. If a Library has no version or is in development, use the hash of the Library’s directory contents as version identifier.
- Consolidated the Resource modes into debug and minified.
- The injector component only sets up the NeededResources if the request method is GET or POST.
- The devmode parameter has been renamed to recompute_hashes in order to more aptly reflect its behavior. When recompute_hashes is True, hashes are recomputed for every request - this is the default behavior.
Fanstatic is a fundamental rewrite of hurry.resource. As such, Fanstatic breaks compatibility with hurry.resource. Here’s a list of essential changes since version 0.10 of hurry.resource:
- Fundamental API cleanups and changes.
- Fanstatic no longer depends on ZTK packages, and provides several ‘pure’ WSGI components. This allows for greater re-use in different WSGI-based frameworks.
- zope.fanstatic (a rewrite of hurry.zoperesource) provides the integration of Fanstatic with the ZTK.
- Fanstatic adds a WSGI component for serving resources, offloading it from the application framework.
- Fanstatic adds ‘infinite’ caching functionality by computing a unique URL for every version of a resource.
- Fanstatic uses py.test for test discovery and execution.
- A lot of effort has been put into documenting Fanstatic.