'Update a Project\'s Release
Update a release.  This can change some metadata associated with
the release (the ref, url, and dates).
:pparam string organization_slug: the slug of the organization the
release belongs to.
:pparam string project_slug: the slug of the project to change the
release of.
:pparam string version: the version identifier of the release.
:param string ref: an optional commit reference.  This is useful if
a tagged version has been provided.
:param url url: a URL that points to the release.  This can be the
path to an online interface to the sourcecode
for instance.
:param datetime dateReleased: an optional date that indicates when
the release went live.  If not provided
the current time is assumed.
:auth: required'

def put(self, request, project, version):

    try:
        release = Release.objects.get(organization_id=project.organization_id, projects=project, version=version)
    except Release.DoesNotExist:
        raise ResourceDoesNotExist
    serializer = ReleaseSerializer(data=request.DATA, partial=True)
    if (not serializer.is_valid()):
        return Response(serializer.errors, status=400)
    result = serializer.object
    was_released = bool(release.date_released)
    kwargs = {}
    if result.get('dateReleased'):
        kwargs['date_released'] = result['dateReleased']
    if result.get('ref'):
        kwargs['ref'] = result['ref']
    if result.get('url'):
        kwargs['url'] = result['url']
    if kwargs:
        release.update(**kwargs)
    commit_list = result.get('commits')
    if commit_list:
        hook = ReleaseHook(project)
        hook.set_commits(release.version, commit_list)
    if ((not was_released) and release.date_released):
        Activity.objects.create(type=Activity.RELEASE, project=project, ident=release.version, data={'version': release.version}, datetime=release.date_released)
    return Response(serialize(release, request.user))
