Esempio n. 1
0
def handleItemForm(request, form, item):
    error = None

    language = Language.getOrCreate(form.cleaned_data['language'])
    source = Source.getOrCreate(form.cleaned_data['source'])
    filesize = None
    if form.cleaned_data['size']:
        filesize = form.cleaned_data['size']

    itemInstance = ItemInstance.getOrCreate(size=filesize,
                                            language=language,
                                            source=source,
                                            creator=request.user,
                                            item=item)
    itemInstance.save()

    if form.cleaned_data['file']:
        itemInstance.path = generateDestinationPath(form)
        if form.cleaned_data['tar']:
            tf = tarfile.open(fileobj=form.cleaned_data['file'])
            tf.extractall(path=path)
        else:
            destination = open(path+os.path.basename(form.cleaned_data['file'].name), 'wb+')
            for chunk in form.cleaned_data['file'].chunks():
                destination.write(chunk)
            destination.close()
        itemInstance.size = form.cleaned_data['file'].size
        itemInstance.mtime = int(os.stat(path).st_mtime)
        itemInstance.present = True
        itemInstance.save()
        form = None
        error = 'Thank you for contributing.'
    elif (form.cleaned_data['dlLinks'] or form.cleaned_data['dlLinksFile']) and form.cleaned_data['keyfile']:
        dlUrls = []
        if form.cleaned_data['dlLinks']:
            dlUrls = [ url.strip() for url in form.cleaned_data['dlLinks'].split(',')]
        else:
            dlUrls = [ url.strip() for url in form.cleaned_data['dlLinksFile'] ]
        if len(dlUrls) > 0:
            key = EncryptionKey.fromFileHandle(form.cleaned_data['keyfile'])
            downloadFileGroup = DownloadFileGroup(itemInstance=itemInstance, key=key)
            downloadFileGroup.save()
            for url in dlUrls:
                df = DownloadFile(downloadFileGroup=downloadFileGroup, downloadLink=url)
                df.save()
        form = None
        error = 'Thank you for contributing.'
    else:
        form = None
        error = "Thank you for enlisting your item. You will be contacted when someone requests this item."
    return form, error