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