visualculture
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

views.py
text/x-python

Download raw (1.4 KB)

"""
visual_culture.views
"""

import os
import errno

from django.http import HttpResponse, HttpResponseBadRequest, Http404
from visual_culture.readers import Reader
from git_info.utils import find_mime

def ensure_dir(path):
    try:
        os.makedirs(path)
    except OSError as exception:
        if exception.errno != errno.EEXIST:
            raise exception


import settings

from git_info import git

if settings.PREFIX:
    git_collection = git.GitCollection(settings.PREFIX)
else:
    git_collection = git.GitCollection()


def transduce(request, repo_name, oid, key, value, filename, extension):
    try:
        repo = git_collection[repo_name]
    except KeyError:
        raise Http404
    try:
        obj = repo[oid]
    except KeyError:
        raise Http404
    
    if obj.type != git.pygit2.GIT_OBJ_BLOB:
        return HttpResponseBadRequest('Requested object is not a BLOB')
    
    mime = find_mime(obj, filename)
    r = Reader()
    options = {}
    if key and value:
        options = {key: value}
    result = r.read_blob({'mime': mime, 'repo_name': repo_name, 'blob_hex': oid}, options)
    cpath = os.path.join(settings.MEDIA_ROOT, repo_name, oid, '%s..%s' % (key, value))
    ensure_dir(cpath)
    with open(os.path.join(cpath, '%s%s' % (filename, extension)), 'wb') as f:
        f.write(result['data'])
    return HttpResponse(result['data'], result['mime'])