Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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