def media_detail(request, repository, mucua, pk=None, format=None): """ Retrieve, create, update or delete a media instance. """ # pegando sessao por url redirect_page = False try: mucua = Mucua.objects.get(description=mucua) except Mucua.DoesNotExist: mucua = Mucua.objects.get(description=DEFAULT_MUCUA) redirect_page = True try: repository = Repository.objects.get(name=repository) except Repository.DoesNotExist: repository = Repository.objects.get(name=DEFAULT_REPOSITORY) redirect_page = True # redirect if redirect_page: return HttpResponseRedirect(redirect_base_url + repository.name + '/' + mucua.description + '/media/') author = request.user if pk: try: media = Media.objects.get(uuid=pk) except Media.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': if pk == '': # acessa para inicializar tela de publicaocao de conteudo / gera # token c = RequestContext(request, {'autoescape': False}) c.update(csrf(request)) t = Template('{ "csrftoken": "{{ csrf_token }}" }') return HttpResponse(t.render(c), mimetype=u'application/json') if pk != '': serializer = MediaSerializer(media) return Response(serializer.data) elif request.method == 'PUT': if pk == '': return HttpResponseRedirect( redirect_base_url + repository.name + '/' + mucua.description + '/bbx/search') media.name = request.DATA['name'] media.note = request.DATA['note'] media.type = request.DATA['type'] media.license = request.DATA['license'] media.date = request.DATA['date'] media.save() if media.id: tags = request.DATA['tags'].split(',') media.tags.clear() for tag in tags: if tag: try: tag = tag.strip() tag = Tag.objects.get(name=tag) except Tag.DoesNotExist: tag = Tag.objects.create(name=tag) # TODO: case or proximity check to avoid spelling # errors? Or do people handle this by manual merging & # deletion of tags? tag.save() media.tags.add(tag) return Response("updated media - OK", status=status.HTTP_201_CREATED) else: return Response("error while creating media", status=status.HTTP_400_BAD_REQUEST) if serializer.is_valid(): serializer.save() return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'POST': """ create a new media """ if request.DATA['author'] != '': author = request.DATA['author'] else: author = request.user try: author = User.objects.get(username=author) except User.DoesNotExist: author = User.objects.get(username=request.user) media = Media(repository=repository, origin=mucua, author=author, name=request.DATA['name'], note=request.DATA['note'], type=request.DATA['type'], format=request.FILES['media_file'].name.split('.')[-1].lower(), license=request.DATA['license'], date=(request.DATA['date'] if request.DATA['date'] != '' else datetime.now()), media_file=request.FILES['media_file'], uuid=generate_UUID() ) media.save() if media.id: # get tags by list or separated by ',' tags = (request.DATA['tags'] if iter(request.DATA['tags']) else request.DATA['tags'].split(',')) for tag_name in tags: try: if tag_name.find(':') > 0: args = tag.split(':') tag_name = args[1] tag = Tag.objects.get(name=tag_name) except Tag.DoesNotExist: tag = Tag.objects.create(name=tag_name) tag.save() media.tags.add(tag) media.save() # salva de novo para chamar o post_save serializer = MediaSerializer(media) return Response(serializer.data, status=status.HTTP_201_CREATED) else: return Response("error while creating media", status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': media.delete() return Response(status=status.HTTP_204_NO_CONTENT)
def media_detail(request, repository, mucua, pk=None, format=None): """ Retrieve, create, update or delete a media instance. """ # TODO: Use object permissions for more fine grained control. # For now, do a more primitive check that the user is authenticated. if request.method != 'GET' and not request.user.is_authenticated(): raise PermissionDenied # pegando sessao por url redirect_page = False if mucua == 'rede': mucua = request.DATA['origin'] try: mucua = Mucua.objects.get(description=mucua) except Mucua.DoesNotExist: mucua = Mucua.objects.get(description=DEFAULT_MUCUA) redirect_page = True try: repository = Repository.objects.get(name=repository) except Repository.DoesNotExist: repository = Repository.objects.get(name=DEFAULT_REPOSITORY) redirect_page = True # redirect if redirect_page: return HttpResponseRedirect(redirect_base_url + repository.name + '/' + mucua.description + '/media/') author = request.user # verifica se tem primary key definido antes de direcionar para os request.methods (get, put, post) if pk: # get media try: media = Media.objects.get(uuid=pk) except Media.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': # get media if pk == '': """ get media Se pk nao existe, chama token (preparacao para insercao) # TODO: mover? """ media_token(request, repository, mucua) if pk != '': serializer = MediaSerializer(media) return Response(serializer.data) elif request.method == 'PUT': """ update media """ if pk == '': return HttpResponseRedirect( redirect_base_url + repository.name + '/' + mucua.description + '/bbx/search') media.name = request.DATA['name'] media.note = request.DATA['note'] media.type = request.DATA['type'] media.license = request.DATA['license'] media.date = request.DATA['date'] # workaround for date problem file_day = str(media.media_file).split('/')[-2] date_day = str(media.date)[8:10] if file_day != date_day: media.date = media.date[0:8] + file_day + media.date[10:] media.save() if media.id: tags = request.DATA['tags'].split(',') media.tags.clear() add_and_synchronize_tags(media, tags, mucua) return Response(_("updated media - OK"), status=status.HTTP_201_CREATED) else: return Response(_("error while creating media"), status=status.HTTP_400_BAD_REQUEST) if serializer.is_valid(): serializer.save() return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'POST': """ create a new media """ if request.DATA['author'] != '': author = request.DATA['author'] else: author = request.user try: author = User.objects.get(username=author) except User.DoesNotExist: author = User.objects.get(username=request.user) try: mucua = Mucua.objects.get(description=request.DATA['origin']) except Mucua.DoesNotExist: mucua = Mucua.objects.get(description=DEFAULT_MUCUA) media = Media(repository=repository, origin=mucua, author=author, note=request.DATA['note'], type=request.DATA['type'], license=request.DATA['license'], name=request.DATA.get('name', ''), date=(request.DATA['date'] if request.DATA['date'] != '' else get_now()), uuid=generate_UUID() ) logger.info('processing upload') # multiple upload for filename, file in request.FILES.iteritems(): file_name = request.FILES[filename].name media.format=file_name.split('.')[-1].lower() if media.name == '': media.name = get_media_name_by_filename(file_name) if hasattr(request.FILES[filename], 'temporary_file_path'): # if file bigger than 2.5MB, is stored in /tmp tmp_file = request.FILES[filename].temporary_file_path() else: # if lesser than 2.5MB, is stored on memory tmp_file = '/tmp/' + media.uuid f = open(tmp_file, 'w') f.write(request.FILES[filename].read()) f.close() media.type=get_media_type_by_filename(tmp_file) if media.type == 'imagem': media.media_file=handle_uploaded_image(media, tmp_file,request.FILES[filename]) else: media.media_file=request.FILES[filename] media.save() if media.id: # get tags by list or separated by ',' tags = request.DATA['tags'].split(',') add_and_synchronize_tags(media, tags, mucua) media.save() # salva de novo para chamar o post_save serializer = MediaSerializer(media) return Response(serializer.data, status=status.HTTP_201_CREATED) else: return Response(_("error while creating media"), status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': media.delete() return Response(status=status.HTTP_204_NO_CONTENT)
def media_detail(request, repository, mucua, pk=None, format=None): """ Retrieve, create, update or delete a media instance. """ # pegando sessao por url redirect_page = False try: mucua = Mucua.objects.get(description=mucua) except Mucua.DoesNotExist: mucua = Mucua.objects.get(description=DEFAULT_MUCUA) redirect_page = True try: repository = Repository.objects.get(name=repository) except Repository.DoesNotExist: repository = Repository.objects.get(name=DEFAULT_REPOSITORY) redirect_page = True # redirect if redirect_page: return HttpResponseRedirect(redirect_base_url + repository.name + '/' + mucua.description + '/media/') author = request.user if pk: try: media = Media.objects.get(uuid=pk) except Media.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': if pk == '': # acessa para inicializar tela de publicaocao de conteudo / gera # token c = RequestContext(request, {'autoescape': False}) c.update(csrf(request)) t = Template('{ "csrftoken": "{{ csrf_token }}" }') return HttpResponse(t.render(c), mimetype=u'application/json') if pk != '': serializer = MediaSerializer(media) return Response(serializer.data) elif request.method == 'PUT': if pk == '': return HttpResponseRedirect(redirect_base_url + repository.name + '/' + mucua.description + '/bbx/search') media.name = request.DATA['name'] media.note = request.DATA['note'] media.type = request.DATA['type'] media.license = request.DATA['license'] media.date = request.DATA['date'] media.save() if media.id: tags = request.DATA['tags'].split(',') media.tags.clear() for tag in tags: if tag: try: tag = tag.strip() tag = Tag.objects.get(name=tag) except Tag.DoesNotExist: tag = Tag.objects.create(name=tag) # TODO: case or proximity check to avoid spelling # errors? Or do people handle this by manual merging & # deletion of tags? tag.save() media.tags.add(tag) return Response("updated media - OK", status=status.HTTP_201_CREATED) else: return Response("error while creating media", status=status.HTTP_400_BAD_REQUEST) if serializer.is_valid(): serializer.save() return Response(serializer.data) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'POST': """ create a new media """ if request.DATA['author'] != '': author = request.DATA['author'] else: author = request.user try: author = User.objects.get(username=author) except User.DoesNotExist: author = User.objects.get(username=request.user) media = Media( repository=repository, origin=mucua, author=author, name=request.DATA['name'], note=request.DATA['note'], type=request.DATA['type'], format=request.FILES['media_file'].name.split('.')[-1].lower(), license=request.DATA['license'], date=(request.DATA['date'] if request.DATA['date'] != '' else datetime.now()), media_file=request.FILES['media_file'], uuid=generate_UUID()) media.save() if media.id: # get tags by list or separated by ',' tags = (request.DATA['tags'] if iter(request.DATA['tags']) else request.DATA['tags'].split(',')) for tag_name in tags: try: if tag_name.find(':') > 0: args = tag.split(':') tag_name = args[1] tag = Tag.objects.get(name=tag_name) except Tag.DoesNotExist: tag = Tag.objects.create(name=tag_name) tag.save() media.tags.add(tag) media.save() # salva de novo para chamar o post_save serializer = MediaSerializer(media) return Response(serializer.data, status=status.HTTP_201_CREATED) else: return Response("error while creating media", status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': media.delete() return Response(status=status.HTTP_204_NO_CONTENT)
from media.models import Media from media.serializers import MediaSerializer from rest_framework.renderers import JSONRenderer from rest_framework.parsers import JSONParser import StringIO media = Media(title='Video Beco 1') media.save() serializer = MediaSerializer(media) serializer.data content = JSONRenderer().render(serializer.data) content stream = StringIO.StringIO(content) data = JSONParser().parse(stream) serializer = MediaSerializer(data=data) serializer.is_valid() serializer.object