def test_exportchannel_thumbnail(self): node = ContentNode(title="Test Node", kind_id=content_kinds.VIDEO) node.save() newfile = create_associated_thumbnail(node, self.thumbnail_fobj) self.assertTrue(isinstance(newfile, File)) thumbnail_data = json.loads(node.thumbnail_encoding) self.assertEqual(thumbnail_data['base64'], generated_base64encoding())
def test_create_node_that_already_exists_no_integrity_error(self): obj = ContentNode.objects.first() new_obj = ContentNode(id=obj.id, kind_id=content_kinds.TOPIC) try: new_obj.save() except IntegrityError: self.fail("Caused an IntegrityError")
def file_create(request): if request.method == 'POST': original_filename, ext = os.path.splitext( request.FILES.values()[0]._name) size = request.FILES.values()[0]._size presets = FormatPreset.objects.filter( allowed_formats__extension__contains=ext[1:].lower()) kind = presets.first().kind preferences = json.loads(request.user.preferences) author = preferences.get('author') or "" license = License.objects.filter( license_name=preferences.get('license')).first( ) # Use filter/first in case preference hasn't been set license_id = license.pk if license else settings.DEFAULT_LICENSE new_node = ContentNode( title=original_filename, kind=kind, license_id=license_id, author=author, copyright_holder=preferences.get('copyright_holder')) if license.license_name == licenses.SPECIAL_PERMISSIONS: new_node.license_description = preferences.get( 'license_description') new_node.save() file_object = File(file_on_disk=DjFile(request.FILES.values()[0]), file_format_id=ext[1:].lower(), original_filename=request.FILES.values()[0]._name, contentnode=new_node, file_size=size) file_object.save() if kind.pk == content_kinds.VIDEO: file_object.preset_id = guess_video_preset_by_resolution( str(file_object.file_on_disk)) elif presets.filter(supplementary=False).count() == 1: file_object.preset = presets.filter(supplementary=False).first() file_object.save() try: if preferences.get('auto_derive_video_thumbnail') and new_node.kind_id == content_kinds.VIDEO \ or preferences.get('auto_derive_audio_thumbnail') and new_node.kind_id == content_kinds.AUDIO \ or preferences.get('auto_derive_html5_thumbnail') and new_node.kind_id == content_kinds.HTML5 \ or preferences.get('auto_derive_document_thumbnail') and new_node.kind_id == content_kinds.DOCUMENT: generate_thumbnail_from_node(new_node, set_node=True) except Exception: pass return HttpResponse( json.dumps({ "success": True, "node": JSONRenderer().render( ContentNodeEditSerializer(new_node).data) }))
def test_internal_thumbnail(self): # Create exercise node (generated images are more predictable) node = ContentNode(title="Test Node", kind_id=content_kinds.VIDEO) node.save() file_data = [{ "preset": None, "filename": str(self.thumbnail_fobj), "language": "en", "size": self.thumbnail_fobj.file_size, }] map_files_to_node(self.user, node, file_data) self.assertTrue(isinstance(node.thumbnail_encoding, basestring)) thumbnail_data = json.loads(node.thumbnail_encoding) self.assertEqual(thumbnail_data['base64'], generated_base64encoding())
def file_create(request): if request.method == 'POST': ext = os.path.splitext(request.FILES.values()[0]._name)[1].split(".")[-1] size = request.FILES.values()[0]._size kind = FormatPreset.objects.filter(allowed_formats__extension__contains=ext).first().kind original_filename = request.FILES.values()[0]._name new_node = ContentNode(title=original_filename.split(".")[0], kind=kind, license_id=settings.DEFAULT_LICENSE, author=request.user.get_full_name()) new_node.save() file_object = File(file_on_disk=request.FILES.values()[0], file_format=FileFormat.objects.get(extension=ext), original_filename = original_filename, contentnode=new_node, file_size=size) file_object.save() return HttpResponse(json.dumps({ "success": True, "object_id": new_node.pk }))
def test_generate_thumbnail(self): # Create exercise node (generated images are more predictable) node = ContentNode(title="Test Node", kind_id=content_kinds.EXERCISE) node.save() # Create assessment item with image assessment_item = AssessmentItem(contentnode=node) assessment_item.save() self.thumbnail_fobj.assessment_item = assessment_item self.thumbnail_fobj.preset_id = format_presets.EXERCISE_IMAGE self.thumbnail_fobj.save() # Call generate_thumbnail endpoint request = self.create_post_request(reverse_lazy('generate_thumbnail', kwargs={'contentnode_id': node.pk})) response = generate_thumbnail(request, node.pk) self.assertEqual(response.status_code, 200) file_data = json.loads(response.content) self.assertEqual(file_data['encoding'], generated_base64encoding())
def test_generate_thumbnail(self): # Create exercise node (generated images are more predictable) node = ContentNode(title="Test Node", kind_id=content_kinds.EXERCISE) node.save() # Create assessment item with image assessment_item = AssessmentItem(contentnode=node) assessment_item.save() self.thumbnail_fobj.assessment_item = assessment_item self.thumbnail_fobj.preset_id = format_presets.EXERCISE_IMAGE self.thumbnail_fobj.save() # Call generate_thumbnail endpoint request = self.create_post_request( reverse_lazy('generate_thumbnail', kwargs={'contentnode_id': node.pk})) response = generate_thumbnail(request, node.pk) self.assertEqual(response.status_code, 200) file_data = json.loads(response.content) self.assertEqual(file_data['encoding'], generated_base64encoding())
def file_create(request): if request.method == 'POST': original_filename, ext = os.path.splitext( request.FILES.values()[0]._name) size = request.FILES.values()[0]._size contentfile = DjFile(request.FILES.values()[0]) checksum = get_hash(contentfile) request.user.check_space(size, checksum) presets = FormatPreset.objects.filter( allowed_formats__extension__contains=ext[1:].lower()) kind = presets.first().kind preferences = json.loads(request.META.get('HTTP_PREFERENCES')) author = preferences.get('author') or "" license = License.objects.filter( license_name=preferences.get('license')).first( ) # Use filter/first in case preference hasn't been set license_id = license.pk if license else None new_node = ContentNode( title=original_filename, kind=kind, license_id=license_id, author=author, copyright_holder=preferences.get('copyright_holder'), ) if license and license.is_custom: new_node.license_description = preferences.get( 'license_description') new_node.save() file_object = File( file_on_disk=contentfile, checksum=checksum, file_format_id=ext[1:].lower(), original_filename=request.FILES.values()[0]._name, contentnode=new_node, file_size=size, uploaded_by=request.user, ) file_object.save() if kind.pk == content_kinds.VIDEO: file_object.preset_id = guess_video_preset_by_resolution( str(file_object.file_on_disk)) elif presets.filter(supplementary=False).count() == 1: file_object.preset = presets.filter(supplementary=False).first() file_object.save() thumbnail = None try: if preferences.get('auto_derive_video_thumbnail') and new_node.kind_id == content_kinds.VIDEO \ or preferences.get('auto_derive_audio_thumbnail') and new_node.kind_id == content_kinds.AUDIO \ or preferences.get('auto_derive_html5_thumbnail') and new_node.kind_id == content_kinds.HTML5 \ or preferences.get('auto_derive_document_thumbnail') and new_node.kind_id == content_kinds.DOCUMENT: thumbnail = generate_thumbnail_from_node(new_node, set_node=True) request.user.check_space(thumbnail.file_size, thumbnail.checksum) except Exception: if thumbnail: thumbnail.delete() return HttpResponse( json.dumps({ "success": True, "node": JSONRenderer().render( ContentNodeEditSerializer(new_node).data) }))
def file_create(request): if request.method != 'POST': return HttpResponseBadRequest("Only POST requests are allowed on this endpoint.") original_filename, ext = os.path.splitext(request.FILES.values()[0]._name) size = request.FILES.values()[0]._size contentfile = DjFile(request.FILES.values()[0]) checksum = get_hash(contentfile) request.user.check_space(size, checksum) presets = FormatPreset.objects.filter(allowed_formats__extension__contains=ext[1:].lower()) kind = presets.first().kind preferences = json.loads(request.POST.get('content_defaults', None) or "{}") license = License.objects.filter(license_name=preferences.get('license')).first() # Use filter/first in case preference hasn't been set license_id = license.pk if license else None new_node = ContentNode( title=original_filename, kind=kind, license_id=license_id, author=preferences.get('author') or "", aggregator=preferences.get('aggregator') or "", provider=preferences.get('provider') or "", copyright_holder=preferences.get('copyright_holder'), parent_id=settings.ORPHANAGE_ROOT_ID, ) if license and license.is_custom: new_node.license_description = preferences.get('license_description') new_node.save() file_object = File( file_on_disk=contentfile, checksum=checksum, file_format_id=ext[1:].lower(), original_filename=request.FILES.values()[0]._name, contentnode=new_node, file_size=size, uploaded_by=request.user, ) file_object.save() if kind.pk == content_kinds.VIDEO: file_object.preset_id = guess_video_preset_by_resolution(str(file_object.file_on_disk)) elif presets.filter(supplementary=False).count() == 1: file_object.preset = presets.filter(supplementary=False).first() file_object.save() thumbnail = None try: if preferences.get('auto_derive_video_thumbnail') and new_node.kind_id == content_kinds.VIDEO \ or preferences.get('auto_derive_audio_thumbnail') and new_node.kind_id == content_kinds.AUDIO \ or preferences.get('auto_derive_html5_thumbnail') and new_node.kind_id == content_kinds.HTML5 \ or preferences.get('auto_derive_document_thumbnail') and new_node.kind_id == content_kinds.DOCUMENT: thumbnail = generate_thumbnail_from_node(new_node, set_node=True) request.user.check_space(thumbnail.file_size, thumbnail.checksum) except Exception: if thumbnail: thumbnail.delete() return HttpResponse(json.dumps({ "success": True, "node": JSONRenderer().render(ContentNodeEditSerializer(new_node).data) }))
def file_create(request): if request.method != 'POST': return HttpResponseBadRequest( "Only POST requests are allowed on this endpoint.") original_filename, ext = os.path.splitext(request.FILES.values()[0]._name) size = request.FILES.values()[0]._size contentfile = DjFile(request.FILES.values()[0]) checksum = get_hash(contentfile) request.user.check_space(size, checksum) presets = FormatPreset.objects.filter( allowed_formats__extension__contains=ext[1:].lower()) kind = presets.first().kind preferences = json.loads( request.POST.get('content_defaults', None) or "{}") license = License.objects.filter( license_name=preferences.get('license')).first( ) # Use filter/first in case preference hasn't been set license_id = license.pk if license else None new_node = ContentNode( title=original_filename, kind=kind, license_id=license_id, author=preferences.get('author') or "", aggregator=preferences.get('aggregator') or "", provider=preferences.get('provider') or "", copyright_holder=preferences.get('copyright_holder'), parent_id=settings.ORPHANAGE_ROOT_ID, ) if license and license.is_custom: new_node.license_description = preferences.get('license_description') # The orphanage is not an actual tree but just a long list of items. with ContentNode.objects.disable_mptt_updates(): new_node.save() file_object = File( file_on_disk=contentfile, checksum=checksum, file_format_id=ext[1:].lower(), original_filename=request.FILES.values()[0]._name, contentnode=new_node, file_size=size, uploaded_by=request.user, ) file_object.save() if kind.pk == content_kinds.VIDEO: file_object.preset_id = guess_video_preset_by_resolution( str(file_object.file_on_disk)) elif presets.filter(supplementary=False).count() == 1: file_object.preset = presets.filter(supplementary=False).first() file_object.save() thumbnail = None try: if preferences.get('auto_derive_video_thumbnail') and new_node.kind_id == content_kinds.VIDEO \ or preferences.get('auto_derive_audio_thumbnail') and new_node.kind_id == content_kinds.AUDIO \ or preferences.get('auto_derive_html5_thumbnail') and new_node.kind_id == content_kinds.HTML5 \ or preferences.get('auto_derive_document_thumbnail') and new_node.kind_id == content_kinds.DOCUMENT: thumbnail = generate_thumbnail_from_node(new_node, set_node=True) request.user.check_space(thumbnail.file_size, thumbnail.checksum) except Exception: if thumbnail: thumbnail.delete() return HttpResponse( json.dumps({ "success": True, "node": JSONRenderer().render(ContentNodeEditSerializer(new_node).data) }))
def test_create_node_null_complete(self): new_obj = ContentNode(kind_id=content_kinds.TOPIC) try: new_obj.save() except IntegrityError: self.fail("Caused an IntegrityError")