Exemple #1
0
 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')
Exemple #2
0
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')
Exemple #3
0
 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)
Exemple #4
0
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)
Exemple #5
0
 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')
Exemple #6
0
    def GET(self):
        media_list = Media.all().order('-created')

        return render('admin/media_pop.html', media_list=media_list)
Exemple #7
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)
Exemple #8
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)
Exemple #9
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)
Exemple #10
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)
Exemple #11
0
 def get_media_list(self, **kwargs):
     return Media.filter_details(**kwargs)
Exemple #12
0
    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
Exemple #13
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