Jump to >

Djblets 0.9 Beta 2 Release Notes

Release date: July 20, 2015

This release contains all bug fixes and features found in Djblets version 0.8.21.


To install this release, run the following:

$ sudo easy_install \
    -f http://downloads.reviewboard.org/releases/Djblets/0.9/ \
    -U Djblets

We do not recommend upgrading a production server with this version of Djblets. This version is still in-development, and is not guaranteed to have API stability.

Compatibility Changes

This release of Djblets is experimentally compatible with Django 1.8. For the time being we still recommend using Django 1.6, but would appreciate bug reports if you do hit problems using newer versions.


  • $.getExtents()`() now returns fractional values.

    Previously, only integer values were returned, which were not always an accurate representation of the extents.


  • Enhanced the cache_memoize() implementation to be usable with generators.

    When trying to cache data that’s being created via a generator, the new cache_memoize_iter() method will populate the cache without gathering up everything into a list first. Pulling data out of the cache will also operate as an iterator rather than preprocessing everything at once.

    Caching large data has also been optimized for speed.


  • Added a responsive UI mode for datagrids.

    When the datagrid is rendered on a small (<= 720px) screen, it now goes into a mobile mode. In this mode, the contents of the datagrid become more vertical in order to make better use of the space without making text too small.

  • Added various blocks to the datagrid templates for better extensibility.

    Rather than just having a big blank white spot, datagrids can now show some custom HTML by overriding the datagrid_empty block.

    The new datagrid_titlebox block can be used to provide additional content before, after, or in place of the titlebox.

    Finally, the paginator block wraps the paginator, allowing it to be removed or replaced.

  • Datagrids can now work with simpler QuerySet-like objects.

    Datagrids are now less tightly bound to Django’s QuerySet, and can now use QuerySet-like objects such as Haystack’s SearchQuerySet.

  • The column customization menu now has an animated sliding effect when showing or dismissing the menu.

  • Fixed numerous display bugs and made some small visual tweaks.

    This includes fixes for inconsistencies between the column headers and the colmn data, jumps in the display of those headers when first rendering the datagrid, and alignment issues when dragging columns.

  • Improved performance when setting up the datagrid.

  • Improved positioning and scrolling of datagrid menus.

  • Fixed problems with pagination links and the gridonly query string parameter. (Bug #3794)

    Patch by Griffin Myers.

  • Fixed CheckboxColumn to not render links around the checkbox.


The new djblets.markdown module contains a bunch of useful utilities for dealing with Markdown text, including:

  • Functions for escaping content for direct inclusion in a Markdown document, and unescaping pre-escaped content.
  • A WYSIWYG-style renderer, which outputs rendered Markdown that looks as close as possible to the source text.
  • A variation of the WISYWIG-style renderer for use in e-mails. This contains works the same way, but uses inline styles instead of requiring an external CSS file.

These functions were previously part of the Review Board codebase, but are useful beyond Review Board and have been moved here.


  • Added a mixin for pre-compiling fixtures to reduce test times.

    The new FixturesCompilerMixin can be mixed into a test case to compile each listed fixture up-front, significantly reducing the time needed for tests to run.


  • Added height-for-width sizing to the thumbnail() template tag.

    When being used from Python, the thumbnail tag can now be passed a 2-tuple instead of a string to represent the size. If the height is omitted, it will be calculated to preserve the image’s aspect ratio.

  • Added a new querystring_with() tag to help with building links.

    When creating links that modify query parameters, it’s often useful to build a new query that contains all of the previous parameters but with the value of one of them changed. This new tag helps with that.


  • Added support for generating and using API tokens for authentication.

    API tokens are a safer way of authenticating with an API, without needing to supply a username or password to a service or script. These tokens can be created and deleted at any time without affecting the user’s account.

    Tokens can also have an access policy assigned, which will limit what operations can be performed on what parts of the API tree.

    Consumers need to use the TokenAuthBackendMixin Django authentication backend, the WebAPITokenAuthBackend API authentication backend, and the ResourceAPITokenMixin mixin for resource subclasses in order to accept API tokens. They must also define a model for storing API token data, inheriting from BaseWebAPIToken.

  • Added a mixin for helping with range-based database queries.

    The new APIQueryUtilsMixin can be used in a resource subclass to help with range-based queries (<, <=, >, >=) coming from the caller, translating them into an appropriate database query.

  • Added an UpdateFormMixin for connecting a WebAPIResource subclass to a Django ModelForm.

    This mixin provides a create_form() method that resources can use to create forms for either creating or updating model instances, giving all the advantages of form validation and consistent instance creation.

  • Added resource-bound utility functions for retrieving the URL to an item or list resource, given a set of URL arguments.

    Each WebAPIResource class now provides get_list_url(), get_item_url(), and build_resource_url() functions that can generate URLs suitable for the resource, given arguments for the URL.

  • Added a class for handling the registration and lookup of API resources.

    ResourcesRegistry makes it easy to lazily register model-to-resource mappings and to handle lookups of resources without running into import loops or other problems. It’s meant to be subclassed and populated.

  • Added utilities for writing unit tests for APIs.

    The new djblets.webapi.testing module includes decorators and mixins for writing complete and comprehensive test suites for an API. That consists of helpers for docstrings and functions for performing API requests and validating results,

  • Added a new DUPLICATE_ITEM error code.

    This is a generic error code that can be used to indicate error states when duplicate constraints are violated.

    Patch by Vincent Le.

  • webapi_request_fields() now passes all parsed arguments from the caller to the function as a parsed_request_fields dictionary.

  • Reorganized the authentication and resources code.

    The djblets.webapi.auth and djblets.webapi.resources modules have been split into multiple modules in preparation for adding some new features. The old names still work, but will show a DeprecationWarning.


  • Replaced spinners with FontAwesome.

    The old animated GIF spinner has been replaced with the spinner in the icon font FontAwesome.


  • Christian Hammond
  • David Trowbridge
  • Griffin Myers
  • Vincent Le