File diff e11e6ff451e4 → 9a06def0e723
www/conservancy/apps/ccs_upload/views.py
Show inline comments
 
new file 100644
 
import logging
 
import os
 
import random
 

	
 
from django.contrib import messages
 
from django.shortcuts import redirect, render
 

	
 
from .forms import UploadForm
 

	
 
CCS_UPLOAD_PATH = '/tmp/'
 

	
 
logger = logging.getLogger(__name__)
 

	
 

	
 
def upload(request):
 
    if request.method == 'POST':
 
        form = UploadForm(request.POST, request.FILES)
 
        if form.is_valid():
 
            file = request.FILES['file']
 
            _handle_uploaded_file(file)
 
            messages.add_message(request, messages.INFO, '"{}" was successfully uploaded.'.format(file.name))
 
            return redirect('ccs_upload:form')
 
    else:
 
        form = UploadForm()
 
    return render(request, 'ccs_upload/upload.html', {'form': form})
 

	
 

	
 
def _handle_uploaded_file(f):
 
    filename = _hash_prefixed_filename(f.name)
 
    path = os.path.join(CCS_UPLOAD_PATH, filename)
 
    with open(path, 'wb+') as destination:
 
        for chunk in f.chunks():
 
            destination.write(chunk)
 
    logger.info('Wrote uploaded file to {}.'.format(path))
 

	
 

	
 
def _hash_prefixed_filename(name: str) -> str:
 
    return '{hash:x} {name}'.format(hash=random.getrandbits(32), name=name)