def restore_object(self, attrs, instance=None): u""" Crea o atualiza um media, dado um dicionário de valores dos campos deserializados. """ if instance: # Update existing instance instance.date = attrs.get('date', instance.date) instance.uuid = attrs.get('uuid', instance.uuid) instance.name = attrs.get('name', instance.name) instance.note = attrs.get('note', instance.note) instance.author = attrs.get('author', instance.author) instance.origin = attrs.get('origin', instance.origin) instance.type = attrs.get('type', instance.type) instance.format = attrs.get('format', instance.format) instance.license = attrs.get('license', instance.license) # instance.media_file(upload_to=attrs.get('media_file', # instance.media_file)) instance.url = attrs.get('url', instance.url) # instance.tags = attrs.get('tags', instance.tags) instance.repository = attrs.get('repository', instance.repository) instance.is_local = attrs.get('is_local', instance.is_local) instance.is_requested = attrs.get('is_requested', instance.is_requested) # instance.request_code = attrs.get('request_code', instance.request_code) instance.num_copies = attrs.get('num_copies', instance.num_copies) return instance # Create new instance return Media(**attrs)
def create(): """Add Media to disk and db.""" form = MediaForm() if request.method == 'POST' and form.validate(): filename = form.file.data.filename alt = form.alt.data img = Image.open(form.file.data.stream) img = img.convert(mode='RGB') img_factory = ImageFactory(path=folio.PUBLIC_PATH, image=img, filename=filename) img_obj = img_factory.batch() media = Media(alt=alt, full=img_obj.get('full'), full_jpeg=img_obj.get('full_jpeg'), large=img_obj.get('large'), large_jpeg=img_obj.get('large_jpeg'), med=img_obj.get('med'), med_jpeg=img_obj.get('med_jpeg'), thumb=img_obj.get('thumb')) db.session.add(media) db.session.commit() return redirect('/media-manager') return render_template('media/create.html')
def publish(request): """ publish a news """ media = Media(url=request.data['media'], title=request.data['title']) media.save() news = News(user=request.user, title=request.data['title']) news.date_posted = request.data['date_posted'] news.category_id = request.data['category_id'] news.source_id = request.data['source_id'] news.author = request.data['author'] news.description = request.data['description'] news.content = request.data['content'] if 'published' in request.data: news.published = datetime.now() news.save() news.media.set([media.id]) serializer = NewsSerializer(news, many=False, context={'request': request}) return JsonResponse(serializer.data, safe=False)
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)
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