def GET(self, blob_key): if blob_key.isdigit(): media = Media.get_by_id(int(blob_key)) else: media = Media.all().filter('blobstore_key =', blob_key).get() blob_info = blobstore.get(blob_key) blob_info.delete() if not media: raise web.notfound() media.delete() raise web.seeother('/admin/media')
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 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 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 POST(self): import cgi fields = cgi.FieldStorage() file_fields = fields['media'] if not isinstance(file_fields, list): file_fields = [file_fields] for field in file_fields: media = Media() try: blob_info = blobstore.parse_blob_info(field) key = str(blob_info.key()) small_img = images.Image(blob_key=key) big_img = images.Image(blob_key=key) media.name = blob_info.filename.decode('utf-8') media.blobstore_key = key except: source = field.value media.name = field.filename.decode('utf-8') media.source = source small_img = images.Image(source) big_img = images.Image(source) small_img.resize(width=200, height=150) small_img.im_feeling_lucky() small_thumb = small_img.execute_transforms(output_encoding=images.JPEG) big_img.resize(width=650, height=1000) big_img.im_feeling_lucky() big_thumb = big_img.execute_transforms(output_encoding=images.JPEG) media.small = small_thumb media.big = big_thumb media.save() raise web.seeother('/admin/media')
def GET(self): media_list = Media.all().order('-created') return render('admin/media_pop.html', media_list=media_list)
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)
def get_media_list(self, **kwargs): return Media.filter_details(**kwargs)
def match_action(self, first_dimension_id, tags_list, media_type=None): dimension_dict = {} media_match_dict = {} # 查找属性ID for item in tags_list: if item['is_default_tag']: tags_list = DimensionCache().get_tag_list_by_dimension_id( item['dimension_id']) item['tag_ids'] = [tag.id for tag in tags_list] # dimension_dict[item['dimension_id']] = {} # continue tag_config_instances = TagConfigure.filter_objects( tag_id__in=item['tag_ids']) attribute_dict = {} for item2 in tag_config_instances: attr_dict = attribute_dict.get(item2.attribute_id, {}) tag_config_list = attr_dict.get('tag_config', []) match_value = item2.match_value if item['is_default_tag']: match_value = 3.0 tag_config_list.append({ 'tag_id': item2.tag_id, 'match_value': match_value }) attr_dict['tag_config'] = tag_config_list media_ids = attr_dict.get('media_ids', []) if not media_ids: media_ins = MediaConfigure.filter_objects( dimension_id=item['dimension_id'], attribute_id=item2.attribute_id) media_ids = [item3.media_id for item3 in media_ins] attr_dict['media_ids'] = media_ids attribute_dict[item2.attribute_id] = attr_dict dimension_dict[item['dimension_id']] = attribute_dict # 生成匹配数据 for dimension_id, item_dict in dimension_dict.items(): for attribute_id, attr_conf_item in item_dict.items(): for media_id in attr_conf_item['media_ids']: media_dict_item = media_match_dict.get(media_id, {}) media_dime_dict_item = media_dict_item.get( dimension_id, {}) match_value_list = [ item2['match_value'] for item2 in attr_conf_item['tag_config'] ] media_dime_dict_item[attribute_id] = match_value_list media_dict_item[dimension_id] = media_dime_dict_item media_match_dict[media_id] = media_dict_item # 匹配计算 dimension_instances = self.get_dimension_list() dimension_ids = [ins.id for ins in dimension_instances] media_value_result = {} for media_id, dime_dict_item in media_match_dict.items(): media_compute_dict_item = {} for dime_id in dimension_ids: if dime_id in dime_dict_item: dime_value = 0 for attr_id, values_list in dime_dict_item[dime_id].items( ): values_list = sorted(values_list) max_value = values_list[-1] offset_value = 0 for item in values_list[:-1]: offset_value += item offset_value = offset_value / 10 attr_value = max_value + offset_value if attr_value > 5: attr_value = 5 dime_value += attr_value dime_value = dime_value / (len(dime_dict_item[dime_id])) else: dime_value = 3 media_compute_dict_item[dime_id] = dime_value media_value_result[media_id] = media_compute_dict_item # 对计算结果进行"阿尔法"调整优化 kwargs = {'id__in': media_value_result.keys()} if media_type: kwargs['media_type'] = media_type media_instances = Media.filter_objects(**kwargs) media_instances_dict = {ins.id: ins for ins in media_instances} media_sum_result = [] for media_id, value_dict in media_value_result.items(): if media_id not in media_instances_dict: continue sum_value = 0 for key, value in value_dict.items(): sum_value += value # 从数据中读取"阿尔法"值 alpha = self.get_adjust_coefficient_value_by_name(name='alpha') total = (sum_value + media_instances_dict[media_id].temperature) * alpha media_sum_result.append({ 'media_id': media_id, 'data': { 'total': total, 'first_dimension_value': value_dict[first_dimension_id] } }) # 对计算结果进行"贝塔"调整优化 media_result = [] media_tmp = sorted(media_sum_result, key=lambda x: x['data']['total'], reverse=True)[:10] media_tmp = sorted(media_tmp, key=lambda x: x['data']['first_dimension_value'], reverse=True) # 从数据中读取"贝塔"值 beta = self.get_adjust_coefficient_value_by_name(name='beta') for tmp_item in media_tmp[:3]: tmp_item['data']['total'] = (tmp_item['data']['total'] * beta) / 78.75 * 100 media_result = sorted(media_tmp, key=lambda x: x['data']['total'], reverse=True)[:3] return media_result
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