Get a specific release by its shortname.

        :param shortname: str, eg. "ceph-3-0"
        :returns: deferred that when fired returns a Release (Munch, dict-like)
                  object representing this release.
        :raises: ReleaseNotFoundException if this release does not exist.

def release(self, shortname):
        """
        Get a specific release by its shortname.

        :param shortname: str, eg. "ceph-3-0"
        :returns: deferred that when fired returns a Release (Munch, dict-like)
                  object representing this release.
        :raises: ReleaseNotFoundException if this release does not exist.
        """
        url = 'api/v6/releases/?shortname=%s' % shortname
        releases = yield self._get(url)
        # Note, even if this shortname does not exist, _get() will not errback
        # for this url. It simply returns an empty list. So check that here:
        if not releases:
            raise ReleaseNotFoundException('no release %s' % shortname)
        release = Release.fromDict(releases[0])
        release.connection = self
        defer.returnValue(release)